package com.bestapp.yikuair.fragments;
import java.io.File;
import java.util.Date;
import android.content.ActivityNotFoundException;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.support.v4.app.Fragment;
import android.text.TextUtils;
import android.util.Log;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;
import com.bestapp.yikuair.R;
import com.bestapp.yikuair.utils.MessageInfo;
import com.bestapp.yikuair.utils.SharedPreferencesUtil;
import com.bestapp.yikuair.utils.StringWidthWeightRandom;
import com.bestapp.yikuair.utils.UploadPhotoUtil;
import com.bestapp.yikuair.utils.UserInfo;
public class SettingFragment extends Fragment {
private RelativeLayout rl_photo;
private RelativeLayout rl_signature;
private RelativeLayout rl_reset_password;
private RelativeLayout rl_change_mobile;
private SelectPicPopupWindow menuWindow;
private static final int FLAG_CHOOSE_IMG = 5;
private static final int FLAG_CHOOSE_PHONE = 6;
private static final int FLAG_MODIFY_FINISH = 7;
private static final int FLAG_SET_SIGNATURE = 8;
private static final int FLAG_SET_MOBILE = 9;
private static String localTempImageFileName = "";
private ImageView head;
private ExitSettingsPW exitPW;
private TextView tv_signature;
private TextView tv_mobile;
private Button exitBtn;
private SharedPreferencesUtil shared;
private ClientSocket client;
public static final String IMAGE_PATH = "yikuair";
public static final File FILE_SDCARD = Environment
.getExternalStorageDirectory();
public static final File FILE_LOCAL = new File(FILE_SDCARD, IMAGE_PATH);
public static final File FILE_PIC_SCREENSHOT = new File(FILE_LOCAL,
"images/screenshots");
public static SettingFragment instance = null;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_settings, null);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
shared = new SharedPreferencesUtil(getActivity());
instance = this;
initView();
}
public static int computeSampleSize(BitmapFactory.Options options,
int minSideLength, int maxNumOfPixels) {
int initialSize = computeInitialSampleSize(options, minSideLength,
maxNumOfPixels);
int roundedSize;
if (initialSize <= 8) {
roundedSize = 1;
while (roundedSize < initialSize) {
roundedSize <<= 1;
}
} else {
roundedSize = (initialSize + 7) / 8 * 8;
}
return roundedSize;
}
private static int computeInitialSampleSize(BitmapFactory.Options options,
int minSideLength, int maxNumOfPixels) {
double w = options.outWidth;
double h = options.outHeight;
int lowerBound = (maxNumOfPixels == -1) ? 1 : (int) Math.ceil(Math
.sqrt(w * h / maxNumOfPixels));
int upperBound = (minSideLength == -1) ? 128 : (int) Math.min(
Math.floor(w / minSideLength), Math.floor(h / minSideLength));
if (upperBound < lowerBound) {
return lowerBound;
}
if ((maxNumOfPixels == -1) && (minSideLength == -1)) {
return 1;
} else if (minSideLength == -1) {
return lowerBound;
} else {
return upperBound;
}
}
public void initView() {
Log.i("test", "initview");
shared = new SharedPreferencesUtil(getActivity());
client = new ClientSocket(getActivity());
exitBtn = (Button) getActivity().findViewById(R.id.exit_btn);
rl_photo = (RelativeLayout) getActivity().findViewById(
R.id.rl_setting_photo);
rl_signature = (RelativeLayout) getActivity().findViewById(
R.id.rl_setting_signature);
rl_reset_password = (RelativeLayout) getActivity().findViewById(
R.id.rl_setting_reset_password);
rl_change_mobile = (RelativeLayout) getActivity().findViewById(
R.id.rl_setting_change_mobile);
head = (ImageView) getActivity().findViewById(R.id.iv_individual_photo);
if (UserInfo.LocalphotoPath != null
&& UserInfo.LocalphotoPath.length() > 0) {
BitmapFactory.Options opts = new BitmapFactory.Options();
opts.inJustDecodeBounds = true;
BitmapFactory.decodeFile(UserInfo.LocalphotoPath, opts);
opts.inSampleSize = computeSampleSize(opts, -1, 128 * 128);
// 这里必然要将其设置回false,因为之前我们将其设置成了true
opts.inJustDecodeBounds = false;
try {
Bitmap bmp = BitmapFactory.decodeFile(UserInfo.LocalphotoPath,
opts);
head.setImageBitmap(bmp);
} catch (OutOfMemoryError err) {
}
} else {
Log.i("test", "sex :" + UserInfo.sex);
if (UserInfo.sex.equals("0")) {
head.setImageDrawable(getResources().getDrawable(
R.drawable.girl));
} else {
head.setImageDrawable(getResources()
.getDrawable(R.drawable.boy));
}
}
tv_signature = (TextView) getActivity().findViewById(
R.id.tv_setting_signature);
tv_mobile = (TextView) getActivity().findViewById(
R.id.tv_setting_mobile);
if (UserInfo.signature != null && UserInfo.signature.length() > 0)
tv_signature.setText(UserInfo.signature);
if (UserInfo.mobile != null && UserInfo.mobile.length() > 0)
tv_mobile.setText(UserInfo.mobile);
rl_photo.setOnClickListener(rlClick);
rl_signature.setOnClickListener(rlClick);
rl_reset_password.setOnClickListener(rlClick);
rl_change_mobile.setOnClickListener(rlClick);
exitBtn.setOnClickListener(rlClick);
}
private OnClickListener rlClick = new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.rl_setting_photo:
String sdStatus = Environment.getExternalStorageState();
if (!sdStatus.equals(Environment.MEDIA_MOUNTED)) {
Toast.makeText(getActivity(),
getString(R.string.sdcard_error),
Toast.LENGTH_SHORT).show();
return;
}
menuWindow = new SelectPicPopupWindow(getActivity(),
itemsOnClick);
menuWindow.showAtLocation(
getActivity().findViewById(R.id.setting),
Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL, 0, 0);
break;
case R.id.rl_setting_signature:
Intent intent2 = new Intent(getActivity(),
SetSignatureActivity.class);
startActivityForResult(intent2, FLAG_SET_SIGNATURE);
getActivity().overridePendingTransition(R.anim.in_from_right,
R.anim.out_of_left);
break;
case R.id.rl_setting_reset_password:
Intent intent3 = new Intent(getActivity(),
SetPasswordActivity.class);
startActivity(intent3);
getActivity().overridePendingTransition(R.anim.in_from_right,
R.anim.out_of_left);
break;
case R.id.rl_setting_change_mobile:
Intent intent4 = new Intent(getActivity(),
ChangeMobileActivity.class);
startActivityForResult(intent4, FLAG_SET_MOBILE);
getActivity().overridePendingTransition(R.anim.in_from_right,
R.anim.out_of_left);
break;
case R.id.exit_btn:
exit_settings();
break;
}
}
};
private OnClickListener itemsOnClick = new OnClickListener() {
public void onClick(View v) {
menuWindow.dismiss();
switch (v.getId()) {
case R.id.btn_pick_photo:
Intent intent = new Intent();
intent.setAction(Intent.ACTION_PICK);
intent.setType("image/*");
startActivityForResult(intent, FLAG_CHOOSE_IMG);
break;
case R.id.btn_take_photo:
String status = Environment.getExternalStorageState();
if (status.equals(Environment.MEDIA_MOUNTED)) {
try {
localTempImageFileName = "";
localTempImageFileName = String.valueOf((new Date())
.getTime()) + ".png";
File filePath = FILE_PIC_SCREENSHOT;
if (!filePath.exists()) {
filePath.mkdirs();
}
Intent intent1 = new Intent(
android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
File f = new File(filePath, localTempImageFileName);
Uri u = Uri.fromFile(f);
intent1.putExtra(MediaStore.Images.Media.ORIENTATION, 0);
intent1.putExtra(MediaStore.EXTRA_OUTPUT, u);
startActivityForResult(intent1, FLAG_CHOOSE_PHONE);
} catch (ActivityNotFoundException e) {
}
}
break;
default:
break;
}
}
};
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == FLAG_CHOOSE_IMG && resultCode == -1) {
if (data != null) {
Uri uri = data.getData();
if (!TextUtils.isEmpty(uri.getAuthority())) {
Cursor cursor = getActivity().getContentResolver().query(
uri, new String[] { MediaStore.Images.Media.DATA },
null, null, null);
if (null == cursor) {
Toast.makeText(getActivity(), "图片没找到", 0).show();
return;
}
cursor.moveToFirst();
String path = cursor.getString(cursor
.getColumnIndex(MediaStore.Images.Media.DATA));
cursor.close();
Log.i("test", "path=" + path);
Intent intent = new Intent(getActivity(),
CropImageActivity.class);
intent.putExtra("path", path);
startActivityForResult(intent, FLAG_MODIFY_FINISH);
} else {
Log.i("test", "path=" + uri.getPath());
Intent intent = new Intent(getActivity(),
CropImageActivity.class);
intent.putExtra("path", uri.getPath());
startActivityForResult(intent, FLAG_MODIFY_FINISH);
}
}
} else if (requestCode == FLAG_CHOOSE_PHONE && resultCode == -1) {
File f = new File(FILE_PIC_SCREENSHOT, localTempImageFileName);
Intent intent = new Intent(getActivity(), CropImageActivity.class);
intent.putExtra("path", f.getAbsolutePath());
startActivityForResult(intent, FLAG_MODIFY_FINISH);
} else if (requestCode == FLAG_MODIFY_FINISH && resultCode == -1) {
if (data != null) {
final String path = data.getStringExtra("path");
Log.i("test", "path = " + path);
Bitmap b = BitmapFactory.decodeFile(path);
head.setImageBitmap(b);
UserInfo.LocalphotoPath = path;
sendHeadModifiedBroadcast(UserInfo.LocalphotoPath);
UploadPhotoUtil util = new UploadPhotoUtil(getActivity());
util.uploadFile(path, StringWidthWeightRandom.getNextString());
shared.savePhotoUrl();
}
} else if (requestCode == FLAG_SET_SIGNATURE) {
if (data == null)
return;
String signature = data.getExtras().getString("signature");
if (signature != null && signature.length() > 0) {
tv_signature.setText(signature);
} else {
tv_signature.setText("未填写");
}
} else if (requestCode == FLAG_SET_MOBILE) {
if (data == null)
return;
String mobile = data.getExtras().getString("mobile");
if (mobile != null && mobile.length() > 0) {
tv_mobile.setText(mobile);
} else {
tv_mobile.setText("未设置");
}
}
}
private void sendHeadModifiedBroadcast(String headurl) {
Log.e("test", "send head broadcast.........");
Intent intent = new Intent();
intent.setAction(MessageInfo.HeadModifieyBroadCastName);
getActivity().sendBroadcast(intent);
}
public void onStart() {
Log.i("test", "setting onstart....................");
super.onStart();
if (UserInfo.isHomePressed) {
UserInfo.isSendBroadCast = false;
if (client == null)
client = new ClientSocket(getActivity());
client.sendMessage(null, 0,
StringWidthWeightRandom.getNextString(), null, null, null,
null, null, null, null, null, true);
UserInfo.isHomePressed = false;
}
}
public void onResume() {
Log.i("test", "setting onResume....................");
super.onResume();
}
@Override
public void onPause() {
super.onPause();
Log.i("test", "setting onPause");
}
@Override
public void onStop() {
super.onStop();
Log.i("test", "setting onStop");
}
@Override
public void onDestroy() {
super.onDestroy();
Log.i("test", "setting onDestroy");
}
public void exit_settings() {
exitPW = new ExitSettingsPW(getActivity());
exitPW.showAtLocation(getActivity().findViewById(R.id.setting),
Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL, 0, 0);
}
}