package com.bestapp.yikuair.fragments; import java.io.File; import java.util.Date; import android.app.Activity; import android.content.ActivityNotFoundException; import android.content.Intent; import android.database.Cursor; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.drawable.BitmapDrawable; 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.View; import android.view.View.OnClickListener; 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.SharedPreferencesUtil; import com.bestapp.yikuair.utils.StringWidthWeightRandom; import com.bestapp.yikuair.utils.UploadPhotoUtil; import com.bestapp.yikuair.utils.UserInfo; import com.umeng.analytics.MobclickAgent; public class SettingActivity extends Activity { 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 SharedPreferencesUtil shared; 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 SettingActivity instance = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.settings); 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(this); rl_photo = (RelativeLayout) findViewById(R.id.rl_setting_photo); rl_signature = (RelativeLayout) findViewById(R.id.rl_setting_signature); rl_reset_password = (RelativeLayout) findViewById(R.id.rl_setting_reset_password); rl_change_mobile = (RelativeLayout) findViewById(R.id.rl_setting_change_mobile); head = (ImageView) 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) findViewById(R.id.tv_setting_signature); tv_mobile = (TextView) 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); } 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(SettingActivity.this, getString(R.string.sdcard_error), Toast.LENGTH_SHORT).show(); return; } menuWindow = new SelectPicPopupWindow(SettingActivity.this, itemsOnClick); menuWindow.showAtLocation(findViewById(R.id.setting), Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL, 0, 0); break; case R.id.rl_setting_signature: Intent intent2 = new Intent(SettingActivity.this, SetSignatureActivity.class); startActivityForResult(intent2, FLAG_SET_SIGNATURE); overridePendingTransition(R.anim.in_from_right, R.anim.out_of_left); break; case R.id.rl_setting_reset_password: Intent intent3 = new Intent(SettingActivity.this, SetPasswordActivity.class); startActivity(intent3); overridePendingTransition(R.anim.in_from_right, R.anim.out_of_left); break; case R.id.rl_setting_change_mobile: Intent intent4 = new Intent(SettingActivity.this, ChangeMobileActivity.class); startActivityForResult(intent4, FLAG_SET_MOBILE); overridePendingTransition(R.anim.in_from_right, R.anim.out_of_left); 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 protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == FLAG_CHOOSE_IMG && resultCode == RESULT_OK) { if (data != null) { Uri uri = data.getData(); if (!TextUtils.isEmpty(uri.getAuthority())) { Cursor cursor = getContentResolver().query(uri, new String[] { MediaStore.Images.Media.DATA }, null, null, null); if (null == cursor) { Toast.makeText(this, "图片没找到", 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(this, CropImageActivity.class); intent.putExtra("path", path); startActivityForResult(intent, FLAG_MODIFY_FINISH); } else { Log.i("test", "path=" + uri.getPath()); Intent intent = new Intent(this, CropImageActivity.class); intent.putExtra("path", uri.getPath()); startActivityForResult(intent, FLAG_MODIFY_FINISH); } } } else if (requestCode == FLAG_CHOOSE_PHONE && resultCode == RESULT_OK) { File f = new File(FILE_PIC_SCREENSHOT, localTempImageFileName); Intent intent = new Intent(this, CropImageActivity.class); intent.putExtra("path", f.getAbsolutePath()); startActivityForResult(intent, FLAG_MODIFY_FINISH); } else if (requestCode == FLAG_MODIFY_FINISH && resultCode == RESULT_OK) { 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; UploadPhotoUtil util = new UploadPhotoUtil(this); util.uploadFile(path, StringWidthWeightRandom.getNextString()); shared.savePhotoUrl(); } } else if (requestCode == FLAG_SET_SIGNATURE) { if (data == null) return; String signature = data.getExtras().getString("signature"); Log.e("test", "sinature : " + 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"); Log.e("test", "mobile : " + mobile); if (mobile != null && mobile.length() > 0) { tv_mobile.setText(mobile); } else { tv_mobile.setText("未设置"); } } } public void onStart() { Log.i("test", "setting onstart...................."); super.onStart(); } @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(View view) { exitPW = new ExitSettingsPW(this); exitPW.showAtLocation(findViewById(R.id.setting), Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL, 0, 0); } public void finishSetting(View view) { finish(); overridePendingTransition(R.anim.in_from_left, R.anim.out_of_right); } @Override public void onBackPressed() { finishSetting(null); } @Override public void onResume() { super.onResume(); MobclickAgent.onResume(this); } @Override public void onPause() { super.onPause(); MobclickAgent.onPause(this); } }