package com.metis.base.fragment;
import android.app.Activity;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.res.Resources;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.support.annotation.Nullable;
import android.support.v7.app.AlertDialog;
import android.text.TextUtils;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.Toast;
import com.metis.base.ActivityDispatcher;
import com.metis.base.R;
import com.metis.base.activity.BaseActivity;
import com.metis.base.manager.AccountManager;
import com.metis.base.manager.CacheManager;
import com.metis.base.manager.DisplayManager;
import com.metis.base.manager.RequestCallback;
import com.metis.base.manager.UploadManager;
import com.metis.base.manager.UserManager;
import com.metis.base.module.SimpleProvince;
import com.metis.base.module.Thumbnail;
import com.metis.base.module.User;
import com.metis.base.utils.Log;
import com.metis.base.widget.EditTextLayout;
import com.metis.base.widget.KeyValueLayout;
import com.metis.base.widget.adapter.delegate.RoleDelegate;
import com.metis.msnetworklib.contract.ReturnInfo;
import com.soundcloud.android.crop.Crop;
import java.io.File;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import cn.sharesdk.framework.Platform;
import cn.sharesdk.framework.PlatformActionListener;
/**
* Created by Beak on 2015/10/8.
*/
public class HomePageFragment extends BaseFragment
implements View.OnClickListener, BaseActivity.ActivityResultListener, BaseActivity.OnBackPressListener{
private static final String TAG = HomePageFragment.class.getSimpleName();
private KeyValueLayout mProfileLayout, mNickNameLayout, mGenderLayout, mRoleLayout, mProvinceLayout, mDepartLayout;
private View mQuitView = null;
private User mUser = null;
private ImageView mProfileIv = null;
private EditTextLayout mNickNameEt = null;
private File mCameraFile = null, mCroppedFile = null;
private boolean isEditable = false;
private List<SimpleProvince> mSimpleProvinceList = null;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_home_page, null, true);
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
mProfileLayout = (KeyValueLayout)view.findViewById(R.id.home_page_profile);
mNickNameLayout = (KeyValueLayout)view.findViewById(R.id.home_page_nickname);
mGenderLayout = (KeyValueLayout)view.findViewById(R.id.home_page_gender);
mRoleLayout = (KeyValueLayout)view.findViewById(R.id.home_page_role);
mProvinceLayout = (KeyValueLayout)view.findViewById(R.id.home_page_province);
mDepartLayout = (KeyValueLayout)view.findViewById(R.id.home_page_department);
mQuitView = view.findViewById(R.id.home_page_quit);
if (mUser != null) {
setUser(mUser);
}
}
@Override
public boolean onBackPressedReceived() {
if (mNickNameLayout.hasValueView(mNickNameEt)) {
mNickNameLayout.removeValueView(mNickNameEt);
mNickNameLayout.setEditable(isEditable);
mNickNameLayout.setValue(mUser.name);
return true;
}
return false;
}
@Override
public void onResume() {
super.onResume();
if (mUser != null) {
setUser(mUser);
}
if (getActivity() instanceof BaseActivity) {
((BaseActivity) getActivity()).registerOnBackPressListener(this);
}
}
@Override
public void onPause() {
super.onResume();
if (getActivity() instanceof BaseActivity) {
((BaseActivity) getActivity()).unregisterOnBackPressListener(this);
}
}
public void setUser (User user) {
Log.v(TAG, "setUser " + user + " " + isAlive());
mUser = user;
if (user == null) {
return;
}
if (!isAlive()) {
return;
}
User me = AccountManager.getInstance(getActivity()).getMe();
isEditable = me != null && me.equals(user);
if (isEditable) {
user = me;
}
mProfileIv = new ImageView(getActivity());
Resources resources = getActivity().getResources();
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(resources.getDimensionPixelSize(R.dimen.profile_size_middle), resources.getDimensionPixelSize(R.dimen.profile_size_middle));
params.gravity = Gravity.RIGHT;
mProfileIv.setLayoutParams(params);
mProfileLayout.addValueView(mProfileIv);
mProfileLayout.setEditable(isEditable);
Log.v(TAG, "setUser getAvailableAvatar " + user.getAvailableAvatar());
DisplayManager.getInstance(getActivity()).displayProfile(
user.getAvailableAvatar(),
mProfileIv);
mProfileLayout.setOnClickListener(this);
mNickNameLayout.setValue(user.name);
mNickNameLayout.setEditable(isEditable);
mNickNameLayout.setOnClickListener(this);
mGenderLayout.setValue(user.getGender());
mGenderLayout.setEditable(isEditable);
mGenderLayout.setOnClickListener(this);
mRoleLayout.setValue(RoleDelegate.getNameIdByRoleId(user.userRole));
mRoleLayout.setEditable(false);
mProvinceLayout.setValue(user.province);
mProvinceLayout.setEditable(isEditable);
mProvinceLayout.setOnClickListener(this);
mDepartLayout.setValue(user.location);
mDepartLayout.setEditable(isEditable);
mQuitView.setVisibility(isEditable ? View.VISIBLE : View.GONE);
mQuitView.setOnClickListener(this);
//Toast.makeText(getActivity(), "setUser " + user.name, Toast.LENGTH_SHORT).show();
}
@Override
public void onClick(View v) {
if (!isEditable) {
return;
}
final int id = v.getId();
if (id == mProfileLayout.getId()) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setItems(
new String[]{getString(R.string.text_camera), getString(R.string.text_gallery)},
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (which == 0) {
mCameraFile = new File (Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).getAbsolutePath() + File.separator + "m_" + System.currentTimeMillis() + ".jpg");
Log.v(TAG, "local path=" + mCameraFile.getAbsolutePath());
getImageFromCamera(Uri.fromFile(mCameraFile));
} else if (which == 1) {
getImageFromGallery();
}
}
});
builder.create().show();
} else if (id == mNickNameLayout.getId()) {
if (mNickNameEt == null) {
mNickNameEt = new EditTextLayout(getActivity());
mNickNameEt.setSingleLine();
mNickNameEt.setContentGravity(Gravity.RIGHT);
mNickNameEt.setOnOkListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
CharSequence newName = mNickNameEt.getText();
if (TextUtils.isEmpty(newName)) {
Toast.makeText(getActivity(), R.string.toast_user_name_empty, Toast.LENGTH_SHORT).show();
return;
} else if (newName.length() > 25) {
Toast.makeText(getActivity(), getString(R.string.toast_user_name_to_long, 25), Toast.LENGTH_SHORT).show();
return;
}
mNickNameLayout.removeValueView(mNickNameEt);
mNickNameLayout.setValue(mNickNameEt.getText());
mNickNameLayout.setEditable(isEditable);
Map<String, String> map = new HashMap<String, String>();
map.put("name", newName.toString());
AccountManager.getInstance(getActivity()).updateUserInfoPost(map, new RequestCallback() {
@Override
public void callback(ReturnInfo returnInfo, String callbackId) {
showTipToast(returnInfo);
}
});
}
});
}
if (mNickNameLayout.hasValueView(mNickNameEt)) {
mNickNameEt.requestFocus();
/*mNickNameLayout.removeValueView(mNickNameEt);
mNickNameLayout.setValue(mNickNameEt.getText());*/
} else {
mNickNameEt.setText(mNickNameLayout.getValue());
mNickNameLayout.setValue("");
mNickNameLayout.setEditable(false);
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
params.gravity = Gravity.RIGHT;
mNickNameEt.setLayoutParams(params);
mNickNameLayout.addValueView(mNickNameEt);
mNickNameEt.requestFocus();
}
} else if (id == mGenderLayout.getId()) {
UserManager.getInstance(getContext()).getUserInfo(mUser.userId, new RequestCallback<User>() {
@Override
public void callback(ReturnInfo<User> returnInfo, String callbackId) {
}
});
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
final String[] items = new String[]{getString(R.string.text_gender_male), getString(R.string.text_gender_female)};
int index = -1;
for (int i = 0; i < items.length; i++) {
if (items[i].equals(mGenderLayout.getValue())) {
index = i;
break;
}
}
builder.setSingleChoiceItems(items, index, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
mGenderLayout.setValue(items[which]);
mUser.setGender(items[which]);
Map<String, String> map = new HashMap<String, String>();
map.put("gender", items[which]);
AccountManager.getInstance(getContext()).updateUserInfoPost(map, new RequestCallback() {
@Override
public void callback(ReturnInfo returnInfo, String callbackId) {
showTipToast(returnInfo);
}
});
dialog.dismiss();
}
});
builder.create().show();
} else if (id == mProvinceLayout.getId()) {
UserManager.getInstance(getContext()).getProvince(new RequestCallback<List<SimpleProvince>>() {
@Override
public void callback(ReturnInfo<List<SimpleProvince>> returnInfo, String callbackId) {
if (returnInfo.isSuccess()) {
mSimpleProvinceList = returnInfo.getData();
final int length = mSimpleProvinceList.size();
CharSequence[] items = new CharSequence[length];
int index = -1;
for (int i = 0; i < length; i++) {
SimpleProvince province = mSimpleProvinceList.get(i);
items[i] = province.name;
if (province.name.equals(mProvinceLayout.getValue())) {
index = i;
}
}
//ArrayAdapter<SimpleProvince> adapter = new ArrayAdapter<SimpleProvince>(getContext(), android.R.layout.select_dialog_item, android.R.id.text1, mSimpleProvinceList);
AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
builder.setSingleChoiceItems(items, index, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
mProvinceLayout.setValue(mSimpleProvinceList.get(which).name);
Map<String, String> map = new HashMap<String, String>();
map.put("province", mSimpleProvinceList.get(which).provinceId + "");
AccountManager.getInstance(getContext()).updateUserInfoPost(map, new RequestCallback() {
@Override
public void callback(ReturnInfo returnInfo, String callbackId) {
showTipToast(returnInfo);
}
});
dialog.dismiss();
}
});
builder.create().show();
}
}
});
/*if (mSimpleProvinceList == null) {
} else {
}*/
/*AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
builder.setAdapter()*/
} else if (id == mQuitView.getId()) {
AccountManager.getInstance(getContext()).logout();
//Toast.makeText(getContext(), "logout onComplete", Toast.LENGTH_SHORT).show();
ActivityDispatcher.loginActivity(getContext());
getActivity().finish();
}
}
public void getImageFromGallery () {
Intent it = new Intent(Intent.ACTION_GET_CONTENT);
it.setType("image/*");
it.putExtra(Intent.EXTRA_LOCAL_ONLY, true);
startActivityForResult(it, 2, this);
}
public void getImageFromCamera (Uri at) {
Intent it = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
it.putExtra(MediaStore.EXTRA_OUTPUT, at);
startActivityForResult(it, 3, this);
}
@Override
public void onActivityResultReceived(int requestCode, int resultCode, Intent data) {
Log.v(TAG, "onActivityResultReceived requestCode=" + requestCode + " resultCode=" + resultCode + " data=" + data);
if (requestCode == 2) {
if (resultCode == Activity.RESULT_OK) {
String outPath = CacheManager.getInstance(getActivity()).getMyImageCacheDir().getAbsolutePath() + File.separator + System.currentTimeMillis() + ".jpg";
mCroppedFile = new File(outPath);
Uri dataUri = data.getData();
if (!mCroppedFile.getParentFile().exists()) {
mCroppedFile.getParentFile().mkdirs();
}
Log.v(TAG, "onActivityResultReceived " + outPath);
if (getActivity() instanceof BaseActivity) {
((BaseActivity) getActivity()).setActivityResultListener(this);
}
Crop.of(dataUri, Uri.fromFile(mCroppedFile)).asSquare().start(getActivity());
}
} else if (requestCode == 3) {
if (resultCode == Activity.RESULT_OK) {
mCroppedFile = new File(CacheManager.getInstance(getActivity()).getMyImageCacheDir().getAbsolutePath() + File.separator + mCameraFile.getName());
if (!mCroppedFile.getParentFile().exists()) {
mCroppedFile.getParentFile().mkdirs();
}
if (getActivity() instanceof BaseActivity) {
((BaseActivity) getActivity()).setActivityResultListener(this);
}
Crop.of(Uri.fromFile(mCameraFile), Uri.fromFile(mCroppedFile)).asSquare().start(getActivity());
/* Bitmap bitmap = (Bitmap) data.getExtras().get("data");
FileUtils.saveBitmap(bitmap, outPath, new SavingTask.Callback() {
@Override
public void onSuccess(List<String> pathList) {
Uri uri = Uri.fromFile(outFile);
Crop.of(uri, uri).asSquare().start(getActivity());
}
@Override
public void onProgress(int progress, int total) {
}
@Override
public void onException(Exception e) {
}
});
Log.v(TAG, "onActivityResultReceived bitmap=" + bitmap);*/
}
} else if (requestCode == Crop.REQUEST_CROP) {
if (resultCode == Activity.RESULT_OK) {
if (mProfileIv != null) {
final Uri uri = Crop.getOutput(data);
Log.v(TAG, "onActivityResultReceived REQUEST_CROP uri=" + uri);
mProfileIv.postDelayed(new Runnable() {
@Override
public void run() {
DisplayManager.getInstance(getActivity()).displayProfile(uri.toString(), mProfileIv);
}
}, 1000);
final AccountManager accountManager = AccountManager.getInstance(getActivity());
UploadManager.getInstance(getActivity()).uploadImage(mCroppedFile, accountManager.getCookies(), new RequestCallback<List<Thumbnail>>() {
@Override
public void callback(ReturnInfo<List<Thumbnail>> returnInfo, String callbackId) {
if (returnInfo.isSuccess()) {
Thumbnail thumbnail = returnInfo.getData().get(0);
Map<String, String> map = new HashMap<String, String>();
map.put("userAvatar", thumbnail.getOriginalImage());
accountManager.updateUserInfoPost(map, new RequestCallback() {
@Override
public void callback(ReturnInfo returnInfo, String callbackId) {
showTipToast(returnInfo);
}
});
}
}
});
/*AccountManager.getInstance(getActivity()).updateUserInfoPost();
AccountManager*/
}
}
}
}
private void showTipToast (ReturnInfo returnInfo) {
if (!isAlive()) {
return;
}
String msg = returnInfo.isSuccess() ? getString(R.string.toast_update_success) : getString(R.string.toast_update_failed, returnInfo.getMessage());
Toast.makeText(getActivity(), msg, Toast.LENGTH_SHORT).show();
}
}