blob: 5b6272a8ae0ad319dd3503d3188b8f12196534eb [file] [log] [blame]
package org.wordpress.android.ui.prefs;
import android.app.Fragment;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import org.wordpress.android.R;
import org.wordpress.android.models.Account;
import org.wordpress.android.models.AccountHelper;
import org.wordpress.android.models.AccountModel;
import org.wordpress.android.util.NetworkUtils;
import org.wordpress.android.util.StringUtils;
import org.wordpress.android.util.ToastUtils;
import org.wordpress.android.widgets.WPTextView;
import java.util.HashMap;
import java.util.Map;
import de.greenrobot.event.EventBus;
public class MyProfileFragment extends Fragment implements ProfileInputDialogFragment.Callback {
private final String DIALOG_TAG = "DIALOG";
private WPTextView mFirstName;
private WPTextView mLastName;
private WPTextView mDisplayName;
private WPTextView mAboutMe;
public static MyProfileFragment newInstance() {
return new MyProfileFragment();
}
@Override
public void onResume() {
super.onResume();
refreshDetails();
if (NetworkUtils.isNetworkAvailable(getActivity())) {
AccountHelper.getDefaultAccount().fetchAccountSettings();
}
}
@Override
public void onStart() {
super.onStart();
EventBus.getDefault().register(this);
}
@Override
public void onStop() {
EventBus.getDefault().unregister(this);
super.onStop();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
final ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.my_profile_fragment, container, false);
mFirstName = (WPTextView) rootView.findViewById(R.id.first_name);
mLastName = (WPTextView) rootView.findViewById(R.id.last_name);
mDisplayName = (WPTextView) rootView.findViewById(R.id.display_name);
mAboutMe = (WPTextView) rootView.findViewById(R.id.about_me);
rootView.findViewById(R.id.first_name_row).setOnClickListener(
createOnClickListener(
getString(R.string.first_name),
null,
mFirstName,
false));
rootView.findViewById(R.id.last_name_row).setOnClickListener(
createOnClickListener(
getString(R.string.last_name),
null,
mLastName,
false));
rootView.findViewById(R.id.display_name_row).setOnClickListener(
createOnClickListener(
getString(R.string.public_display_name),
getString(R.string.public_display_name_hint),
mDisplayName,
false));
rootView.findViewById(R.id.about_me_row).setOnClickListener(
createOnClickListener(
getString(R.string.about_me),
getString(R.string.about_me_hint),
mAboutMe,
true));
return rootView;
}
private void refreshDetails() {
if (!isAdded()) return;
Account account = AccountHelper.getDefaultAccount();
updateLabel(mFirstName, account != null ? StringUtils.unescapeHTML(account.getFirstName()) : null);
updateLabel(mLastName, account != null ? StringUtils.unescapeHTML(account.getLastName()) : null);
updateLabel(mDisplayName, account != null ? StringUtils.unescapeHTML(account.getDisplayName()) : null);
updateLabel(mAboutMe, account != null ? StringUtils.unescapeHTML(account.getAboutMe()) : null);
}
private void updateLabel(WPTextView textView, String text) {
textView.setText(text);
if (TextUtils.isEmpty(text)) {
if (textView == mDisplayName) {
Account account = AccountHelper.getDefaultAccount();
mDisplayName.setText(account.getUserName());
} else {
textView.setVisibility(View.GONE);
}
}
else {
textView.setVisibility(View.VISIBLE);
}
}
// helper method to create onClickListener to avoid code duplication
private View.OnClickListener createOnClickListener(final String dialogTitle,
final String hint,
final WPTextView textView,
final boolean isMultiline) {
return new View.OnClickListener() {
@Override
public void onClick(View v) {
ProfileInputDialogFragment inputDialog = ProfileInputDialogFragment.newInstance(dialogTitle,
textView.getText().toString(), hint, isMultiline, textView.getId());
inputDialog.setTargetFragment(MyProfileFragment.this, 0);
inputDialog.show(getFragmentManager(), DIALOG_TAG);
}
};
}
@Override
public void onSuccessfulInput(String input, int callbackId) {
View rootView = getView();
if (rootView == null) return;
if (!NetworkUtils.isNetworkAvailable(getActivity())) {
ToastUtils.showToast(getActivity(), R.string.error_post_my_profile_no_connection);
return;
}
WPTextView textView = (WPTextView) rootView.findViewById(callbackId);
updateLabel(textView, input);
updateMyProfileForLabel(textView);
}
private void updateMyProfileForLabel(TextView textView) {
Map<String, String> params = new HashMap<>();
params.put(restParamForTextView(textView), textView.getText().toString());
AccountHelper.getDefaultAccount().postAccountSettings(params);
}
// helper method to get the rest parameter for a text view
private String restParamForTextView(TextView textView) {
if (textView == mFirstName) {
return AccountModel.RestParam.FIRST_NAME.getDescription();
} else if (textView == mLastName) {
return AccountModel.RestParam.LAST_NAME.getDescription();
} else if (textView == mDisplayName) {
return AccountModel.RestParam.DISPLAY_NAME.getDescription();
} else if (textView == mAboutMe) {
return AccountModel.RestParam.ABOUT_ME.getDescription();
}
return null;
}
public void onEventMainThread(PrefsEvents.AccountSettingsFetchSuccess event) {
refreshDetails();
}
}