/* * This file is part of Find Your Friend. * * Find Your Friend is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Find Your Friend is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with Find Your Friend. If not, see <http://www.gnu.org/licenses/>. */ package com.sgu.findyourfriend.screen; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import android.app.Dialog; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.content.SharedPreferences.OnSharedPreferenceChangeListener; import android.content.pm.LabeledIntent; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.content.res.Resources; import android.os.AsyncTask; import android.os.Bundle; import android.preference.CheckBoxPreference; import android.preference.MultiSelectListPreference; import android.preference.Preference; import android.preference.Preference.OnPreferenceClickListener; import android.preference.PreferenceFragment; import android.text.Html; import android.text.InputType; import android.util.Log; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.view.Window; import android.view.WindowManager; import android.view.WindowManager.LayoutParams; import android.widget.Button; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.CompoundButton.OnCheckedChangeListener; import android.widget.EditText; import android.widget.ListView; import android.widget.TextView; import com.sgu.findyourfriend.R; import com.sgu.findyourfriend.adapter.MessageContactAdapter; import com.sgu.findyourfriend.mgr.Config; import com.sgu.findyourfriend.mgr.FriendManager; import com.sgu.findyourfriend.mgr.MyProfileManager; import com.sgu.findyourfriend.mgr.SettingManager; import com.sgu.findyourfriend.model.Friend; import com.sgu.findyourfriend.net.PostData; import com.sgu.findyourfriend.service.ServiceUpdatePosition; import com.sgu.findyourfriend.utils.PreferenceKeys; import com.sgu.findyourfriend.utils.Utility; public class SettingFragment extends PreferenceFragment implements OnSharedPreferenceChangeListener { private final String TAG = SettingFragment.class.getName(); private Preference preferLogout; private Preference preferChangePassword; private Preference preferHelp; private Preference preferDevInfo; private Preference preferAccountManager; private Preference preferEditProfile; private CheckBoxPreference switchRunBkg; private Preference preferenceWarningDefault; private Preference preferDefaultMessage; private Preference preferInstructor; private Preference preferShare; public SettingFragment() { } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.getPreferenceManager().setSharedPreferencesName( PreferenceKeys.SHARE_PREFERENCES_KEY); addPreferencesFromResource(R.xml.setting); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { setupPrefs(); return super.onCreateView(inflater, container, savedInstanceState); } private void setupPrefs() { switchRunBkg = (CheckBoxPreference) getPreferenceScreen() .findPreference(PreferenceKeys.runBackground); // friend list setup preferenceWarningDefault = (Preference) getPreferenceScreen() .findPreference(PreferenceKeys.friendsWarning); preferenceWarningDefault .setOnPreferenceClickListener(new OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { (new FriendSelectDialog(getActivity())).show(); return false; } }); // default message setting preferDefaultMessage = (Preference) getPreferenceScreen() .findPreference(PreferenceKeys.defaultMsg); preferDefaultMessage .setOnPreferenceClickListener(new OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference arg0) { setDefaultMessageDialog(); return false; } }); // prefer logout preferLogout = (Preference) getPreferenceScreen().findPreference( PreferenceKeys.preferLogout); preferLogout .setOnPreferenceClickListener(new OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference arg0) { MyProfileManager.getInstance().clear(); Log.i(TAG, "logout here --------------------------"); Intent intent = new Intent(getActivity(), MainLoginActivity.class); intent.putExtra("fromLogout", true); getActivity().startActivity(intent); getActivity().finish(); return false; } }); // prefer change password preferChangePassword = (Preference) getPreferenceScreen() .findPreference(PreferenceKeys.preferChangePassword); preferChangePassword .setOnPreferenceClickListener(new OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference arg0) { changePasswordDialog(); return false; } }); // prefer help preferHelp = (Preference) getPreferenceScreen().findPreference( PreferenceKeys.preferHelp); preferHelp .setOnPreferenceClickListener(new OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference arg0) { // (new HelpInfoDialog(getActivity())).show(); Utility.showScrollerDialog(Utility.CONFIRM, new Dialog( getActivity()), "Trợ giúp", getResources() .getString(R.string.help)); return false; } }); // prefer develop infomation preferDevInfo = (Preference) getPreferenceScreen().findPreference( PreferenceKeys.preferDevInfo); preferDevInfo .setOnPreferenceClickListener(new OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference arg0) { devInfoDialog(); return false; } }); // prefer develop information preferAccountManager = (Preference) getPreferenceScreen() .findPreference(PreferenceKeys.preferAccountManager); preferAccountManager .setOnPreferenceClickListener(new OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference arg0) { (new PhoneNumberManagerDialog(getActivity())).show(); return false; } }); // prefer edit profile preferEditProfile = (Preference) getPreferenceScreen().findPreference( PreferenceKeys.preferEditProfile); preferEditProfile .setOnPreferenceClickListener(new OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference arg0) { Intent intent = new Intent(getActivity(), EditProfileActivity.class); getActivity().startActivity(intent); return false; } }); // prefer manual preferInstructor = (Preference) getPreferenceScreen().findPreference( PreferenceKeys.preferInstructor); preferInstructor .setOnPreferenceClickListener(new OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference arg0) { getActivity().startActivity( new Intent(getActivity(), InstructioActivity.class)); return false; } }); // prefer facebook preferShare = (Preference) getPreferenceScreen().findPreference( PreferenceKeys.preferShare); preferShare .setOnPreferenceClickListener(new OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference arg0) { onShareClick(); return false; } }); } @Override public void onResume() { super.onResume(); getPreferenceScreen().getSharedPreferences() .registerOnSharedPreferenceChangeListener(this); } @Override public void onPause() { // TODO Auto-generated method stub super.onPause(); getPreferenceScreen().getSharedPreferences() .unregisterOnSharedPreferenceChangeListener(this); } @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { if (key.equals(PreferenceKeys.runBackground)) { SettingManager.getInstance().setUploadMyPosition( switchRunBkg.isChecked()); if (switchRunBkg.isChecked()) { Intent i = new Intent(getActivity(), ServiceUpdatePosition.class); i.putExtra("isStop", false); getActivity().startService(i); } else { Intent i = new Intent(getActivity(), ServiceUpdatePosition.class); i.putExtra("isStop", true); getActivity().startService(i); } SettingManager.getInstance().getMapType(); } Log.i(TAG, "Setting: " + key); } private String newPassword; private String renewPassword; private ProgressDialogCustom progressDialog; @SuppressWarnings("deprecation") private void changePasswordDialog() { final EditText mNewPassword; final EditText mReNewPassword; final Button mAcceptBtn; final Button mCancelBtn; final Dialog mdialog = new Dialog(getActivity()); Window W = mdialog.getWindow(); W.setGravity(Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL); W.setLayout(ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.FILL_PARENT); W.requestFeature(Window.FEATURE_NO_TITLE); W.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); mdialog.setContentView(R.layout.dialog_change_password); ((TextView) mdialog.findViewById(R.id.title)).setText("Đổi mật khẩu"); mNewPassword = (EditText) mdialog.findViewById(R.id.pass_new); mReNewPassword = (EditText) mdialog.findViewById(R.id.pass_renewpass); mAcceptBtn = (Button) mdialog.findViewById(R.id.acceptBtn); mAcceptBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { newPassword = mNewPassword.getText().toString().trim(); renewPassword = mReNewPassword.getText().toString().trim(); final Dialog dialog = new Dialog(getActivity()); mNewPassword.setBackgroundDrawable(getActivity().getResources() .getDrawable(R.drawable.edit_text)); mReNewPassword.setBackgroundDrawable(getActivity() .getResources().getDrawable(R.drawable.edit_text)); if (newPassword.equals("")) { mNewPassword.setBackgroundDrawable(getActivity() .getResources().getDrawable( R.drawable.edit_text_wrong)); Utility.showDialog(Utility.ERROR, dialog, "Thiếu thông tin", "Nhập mật khẩu mới", "Đóng", new OnClickListener() { @Override public void onClick(View arg0) { dialog.dismiss(); } }); return; } else if (newPassword.length() < Config.MIN_PASSWORD_LENGHT) { mNewPassword.setBackgroundDrawable(getActivity() .getResources().getDrawable( R.drawable.edit_text_wrong)); Utility.showDialog(Utility.ERROR, dialog, "Thiếu thông tin", "Nhập mật khẩu mới ít nhất " + Config.MIN_PASSWORD_LENGHT + " ký tự", "Đóng", new OnClickListener() { @Override public void onClick(View arg0) { dialog.dismiss(); } }); return; } else if (!renewPassword.equals(newPassword)) { mReNewPassword.setBackgroundDrawable(getActivity() .getResources().getDrawable( R.drawable.edit_text_wrong)); Utility.showDialog(Utility.ERROR, dialog, "Mật khẩu không trùng khớp", "Mật khẩu phải tương tự mật khẩu mới.", "Đóng", new OnClickListener() { @Override public void onClick(View arg0) { dialog.dismiss(); } }); return; } (new AsyncTask<Void, Void, Boolean>() { @Override protected void onPreExecute() { progressDialog = new ProgressDialogCustom(getActivity()); progressDialog.show(); } @Override protected Boolean doInBackground(Void... params) { return PostData.userChangePassword(getActivity(), MyProfileManager.getInstance().getMyID(), SettingManager.getInstance().getPasswordAutoLogin(), newPassword); } @Override protected void onPostExecute(Boolean result) { progressDialog.dismiss(); if (result) { Utility.showDialog(Utility.CONFIRM, dialog, "Đổi mật khẩu thành công", "Mật khẩu của bạn đã được thay đổi.", "Đóng", new OnClickListener() { @Override public void onClick(View arg0) { dialog.dismiss(); mdialog.dismiss(); } }); SettingManager.getInstance().savePasswordAutoLogin( newPassword); } else { Utility.showDialog( Utility.ERROR, dialog, "Đổi mật khẩu thất bại", "Xãy ra lỗi trong quá trình đổi mật khẩu. Xin thử lại sau.", "Đóng", new OnClickListener() { @Override public void onClick(View arg0) { dialog.dismiss(); mdialog.dismiss(); } }); } } }).execute(); } }); mCancelBtn = (Button) mdialog.findViewById(R.id.cancelBtn); mCancelBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mdialog.dismiss(); } }); mdialog.show(); } private void deleteAccountDialog() { final Dialog dialog = new Dialog(getActivity()); Utility.showDialog(Utility.WARNING, dialog, "Xóa tài khoản", "Bạn có chắc muốn xóa tài khoản?", "Đồng ý", new OnClickListener() { @Override public void onClick(View v) { dialog.dismiss(); MyProfileManager.getInstance().clear(); getActivity().finish(); Intent intent = new Intent(getActivity(), MainLoginActivity.class); getActivity().startActivity(intent); } }, "Thôi", new OnClickListener() { @Override public void onClick(View v) { } }); dialog.show(); } private void devInfoDialog() { Utility.showScrollerDialog(Utility.CONFIRM, new Dialog(getActivity()), "Thông tin ứng dụng", getResources().getString(R.string.about)); } private void setDefaultMessageDialog() { final Dialog dialog = new Dialog(getActivity()); Window W = dialog.getWindow(); W.setGravity(Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL); W.setLayout(ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.FILL_PARENT); W.requestFeature(Window.FEATURE_NO_TITLE); W.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); dialog.setContentView(R.layout.dialog_default_message_setting); ((TextView) dialog.findViewById(R.id.title)) .setText("Tin nhắn mặc định"); ((TextView) dialog.findViewById(R.id.content)).setText(SettingManager .getInstance().getDefaultMsg()); ((Button) dialog.findViewById(R.id.btnLeft)) .setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { SettingManager.getInstance().setDefaultMsg( ((TextView) dialog.findViewById(R.id.content)) .getText().toString()); dialog.dismiss(); } }); ((Button) dialog.findViewById(R.id.btnRight)) .setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { dialog.dismiss(); } }); dialog.show(); } class FriendSelectDialog extends Dialog { private Context ctx; private ArrayList<Friend> data; private MessageContactAdapter adapter; private ListView lv; private HashSet<String> ids; // selected before private Button btnSelect; private Button btnAccept; private boolean isSelectMode; // = false; public FriendSelectDialog(Context context) { super(context, R.style.full_screen_dialog); this.ctx = context; } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.friend_default_warning_layout); getWindow().setLayout(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); // setup view lv = (ListView) findViewById(R.id.list); data = new ArrayList<Friend>( FriendManager.getInstance().pureFriends); ids = (HashSet<String>) SettingManager.getInstance() .getDefaultWarning(); for (Friend f : data) { if (ids.contains(f.getUserInfo().getId() + "")) f.setCheck(true); else f.setCheck(false); } adapter = new MessageContactAdapter(ctx, R.layout.custom_contact_addfriend, data); lv.setAdapter(adapter); btnSelect = (Button) findViewById(R.id.btnSelectAll); if (isSelectAll()) { isSelectMode = false; btnSelect.setText("Bỏ chọn"); } else { isSelectMode = true; btnSelect.setText("Chọn tất cả"); } btnSelect.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { if (isSelectMode) { adapter.checkAll(); btnSelect.setText("Bỏ chọn"); } else { adapter.unCheckAll(); btnSelect.setText("Chọn tất cả"); } isSelectMode = !isSelectMode; } }); btnAccept = (Button) findViewById(R.id.btnAccept); btnAccept.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { HashSet<String> hset = new HashSet<String>(); for (Friend f : data) { if (f.isCheck()) { hset.add(f.getUserInfo().getId() + ""); } } SettingManager.getInstance().setDefaultWarning(hset); dismiss(); } }); } private boolean isSelectAll() { for (Friend f : data) { if (!f.isCheck()) return false; } return true; } } private void onShareClick() { Resources resources = getResources(); Intent emailIntent = new Intent(); emailIntent.setAction(Intent.ACTION_SEND); // Native email client doesn't currently support HTML, but it doesn't // hurt to try in case they fix it emailIntent.putExtra(Intent.EXTRA_TEXT, Html.fromHtml(resources.getString(R.string.share_content))); emailIntent.putExtra(Intent.EXTRA_SUBJECT, resources.getString(R.string.share_title)); emailIntent.setType("message/rfc822"); PackageManager pm = getActivity().getPackageManager(); Intent sendIntent = new Intent(Intent.ACTION_SEND); sendIntent.setType("text/plain"); Intent openInChooser = Intent.createChooser(emailIntent, resources.getString(R.string.share_title)); List<ResolveInfo> resInfo = pm.queryIntentActivities(sendIntent, 0); List<LabeledIntent> intentList = new ArrayList<LabeledIntent>(); for (int i = 0; i < resInfo.size(); i++) { // Extract the label, append it, and repackage it in a LabeledIntent ResolveInfo ri = resInfo.get(i); String packageName = ri.activityInfo.packageName; if (packageName.contains("android.email")) { emailIntent.setPackage(packageName); } else if (packageName.contains("twitter") || packageName.contains("facebook") || packageName.contains("mms") || packageName.contains("android.gm")) { Intent intent = new Intent(); intent.setComponent(new ComponentName(packageName, ri.activityInfo.name)); intent.setAction(Intent.ACTION_SEND); intent.setType("text/plain"); if (packageName.contains("twitter")) { intent.putExtra(Intent.EXTRA_TEXT, resources.getString(R.string.share_title)); } else if (packageName.contains("facebook")) { intent.putExtra(Intent.EXTRA_TEXT, resources.getString(R.string.share_title)); } else if (packageName.contains("mms")) { intent.putExtra(Intent.EXTRA_TEXT, resources.getString(R.string.share_title)); } else if (packageName.contains("android.gm")) { intent.putExtra(Intent.EXTRA_TEXT, Html.fromHtml(resources .getString(R.string.share_content))); intent.putExtra(Intent.EXTRA_SUBJECT, resources.getString(R.string.share_title)); intent.setType("message/rfc822"); } intentList.add(new LabeledIntent(intent, packageName, ri .loadLabel(pm), ri.icon)); } } // convert intentList to array LabeledIntent[] extraIntents = intentList .toArray(new LabeledIntent[intentList.size()]); openInChooser.putExtra(Intent.EXTRA_INITIAL_INTENTS, extraIntents); startActivity(openInChooser); } }