diff --git a/WordPress/src/future/res/drawable-xxxhdpi/me_icon_account_settings.png b/WordPress/src/future/res/drawable-xxxhdpi/me_icon_account_settings.png
new file mode 100644
index 000000000000..c84ce34e0a53
Binary files /dev/null and b/WordPress/src/future/res/drawable-xxxhdpi/me_icon_account_settings.png differ
diff --git a/WordPress/src/future/res/drawable-xxxhdpi/me_icon_login_logout.png b/WordPress/src/future/res/drawable-xxxhdpi/me_icon_login_logout.png
new file mode 100644
index 000000000000..90489dd5ba6e
Binary files /dev/null and b/WordPress/src/future/res/drawable-xxxhdpi/me_icon_login_logout.png differ
diff --git a/WordPress/src/future/res/drawable-xxxhdpi/me_icon_my_profile.png b/WordPress/src/future/res/drawable-xxxhdpi/me_icon_my_profile.png
new file mode 100644
index 000000000000..48b7f24887f3
Binary files /dev/null and b/WordPress/src/future/res/drawable-xxxhdpi/me_icon_my_profile.png differ
diff --git a/WordPress/src/future/res/drawable-xxxhdpi/me_icon_notifications.png b/WordPress/src/future/res/drawable-xxxhdpi/me_icon_notifications.png
new file mode 100644
index 000000000000..b41a3ccc8c2c
Binary files /dev/null and b/WordPress/src/future/res/drawable-xxxhdpi/me_icon_notifications.png differ
diff --git a/WordPress/src/future/res/drawable-xxxhdpi/me_icon_support.png b/WordPress/src/future/res/drawable-xxxhdpi/me_icon_support.png
new file mode 100644
index 000000000000..665b8f0f0e80
Binary files /dev/null and b/WordPress/src/future/res/drawable-xxxhdpi/me_icon_support.png differ
diff --git a/WordPress/src/main/AndroidManifest.xml b/WordPress/src/main/AndroidManifest.xml
index d395cbaba663..b57f791769d3 100644
--- a/WordPress/src/main/AndroidManifest.xml
+++ b/WordPress/src/main/AndroidManifest.xml
@@ -316,6 +316,12 @@
android:theme="@style/CalypsoTheme"
android:windowSoftInputMode="stateHidden"/>
+
+
+
params) {
+ com.wordpress.rest.RestRequest.Listener listener = new RestRequest.Listener() {
+ @Override
+ public void onResponse(JSONObject jsonObject) {
+ if (jsonObject != null) {
+ updateAccountSettingsFromRestResponse(jsonObject);
+ save();
+ }
+ }
+ };
+
+ RestRequest.ErrorListener errorListener = new RestRequest.ErrorListener() {
+ @Override
+ public void onErrorResponse(VolleyError volleyError) {
+ AppLog.e(T.API, volleyError);
+ }
+ };
+
+ WordPress.getRestClientUtilsV1_1().post("me/settings", params, null, listener, errorListener);
+ }
public void signout() {
init();
@@ -46,4 +93,21 @@ public void signout() {
public void save() {
AccountTable.save(this);
}
+
+ public enum RestParam {
+ FIRST_NAME("first_name"),
+ LAST_NAME("last_name"),
+ DISPLAY_NAME("display_name"),
+ ABOUT_ME("description");
+
+ private String description;
+
+ RestParam(String description) {
+ this.description = description;
+ }
+
+ public static String toString(RestParam param) {
+ return param.description;
+ }
+ }
}
diff --git a/WordPress/src/main/java/org/wordpress/android/models/AccountModel.java b/WordPress/src/main/java/org/wordpress/android/models/AccountModel.java
index deed724741fc..4d8f18c3396d 100644
--- a/WordPress/src/main/java/org/wordpress/android/models/AccountModel.java
+++ b/WordPress/src/main/java/org/wordpress/android/models/AccountModel.java
@@ -17,6 +17,9 @@ public class AccountModel {
private int mVisibleSiteCount;
private String mAccessToken;
private String mEmail;
+ private String mFirstName;
+ private String mLastName;
+ private String mAboutMe;
public AccountModel() {
init();
@@ -33,6 +36,9 @@ public void init() {
mVisibleSiteCount = 0;
mAccessToken = "";
mEmail = "";
+ mFirstName = "";
+ mLastName = "";
+ mAboutMe = "";
}
public void updateFromRestResponse(JSONObject json) {
@@ -47,6 +53,13 @@ public void updateFromRestResponse(JSONObject json) {
mEmail = json.optString("email");
}
+ public void updateAccountSettingsFromRestResponse(JSONObject json) {
+ mFirstName = json.optString("first_name");
+ mLastName = json.optString("last_name");
+ mDisplayName = json.optString("display_name");
+ mAboutMe = json.optString("description");
+ }
+
public long getUserId() {
return mUserId;
}
@@ -130,4 +143,28 @@ public void setEmail(String email) {
public String getEmail() {
return StringUtils.notNullStr(mEmail);
}
+
+ public String getFirstName() {
+ return StringUtils.notNullStr(mFirstName);
+ }
+
+ public void setFirstName(String firstName) {
+ mFirstName = firstName;
+ }
+
+ public String getLastName() {
+ return StringUtils.notNullStr(mLastName);
+ }
+
+ public void setLastName(String lastName) {
+ mLastName = lastName;
+ }
+
+ public String getAboutMe() {
+ return StringUtils.notNullStr(mAboutMe);
+ }
+
+ public void setAboutMe(String aboutMe) {
+ mAboutMe = aboutMe;
+ }
}
diff --git a/WordPress/src/main/java/org/wordpress/android/ui/ActivityLauncher.java b/WordPress/src/main/java/org/wordpress/android/ui/ActivityLauncher.java
index b421dd23a93a..aa59a625250c 100644
--- a/WordPress/src/main/java/org/wordpress/android/ui/ActivityLauncher.java
+++ b/WordPress/src/main/java/org/wordpress/android/ui/ActivityLauncher.java
@@ -20,6 +20,7 @@
import org.wordpress.android.ui.accounts.SignInActivity;
import org.wordpress.android.ui.comments.CommentsActivity;
import org.wordpress.android.ui.main.SitePickerActivity;
+import org.wordpress.android.ui.prefs.MyProfileActivity;
import org.wordpress.android.ui.media.MediaBrowserActivity;
import org.wordpress.android.ui.media.WordPressMediaUtils;
import org.wordpress.android.ui.posts.EditPostActivity;
@@ -172,8 +173,15 @@ public static void addMedia(Activity activity) {
WordPressMediaUtils.launchPictureLibrary(activity);
}
+ public static void viewMyProfile(Context context) {
+ Intent intent = new Intent(context, MyProfileActivity.class);
+ AnalyticsUtils.trackWithCurrentBlogDetails(AnalyticsTracker.Stat.OPENED_MY_PROFILE);
+ slideInFromRight(context, intent);
+ }
+
public static void viewAccountSettings(Activity activity) {
Intent intent = new Intent(activity, SettingsActivity.class);
+ AnalyticsUtils.trackWithCurrentBlogDetails(AnalyticsTracker.Stat.OPENED_ACCOUNT_SETTINGS);
slideInFromRightForResult(activity, intent, RequestCodes.ACCOUNT_SETTINGS);
}
diff --git a/WordPress/src/main/java/org/wordpress/android/ui/main/MeFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/main/MeFragment.java
index d367af217a66..b49df4b2630d 100644
--- a/WordPress/src/main/java/org/wordpress/android/ui/main/MeFragment.java
+++ b/WordPress/src/main/java/org/wordpress/android/ui/main/MeFragment.java
@@ -22,12 +22,15 @@
import org.wordpress.android.models.Account;
import org.wordpress.android.models.AccountHelper;
import org.wordpress.android.ui.ActivityLauncher;
+import org.wordpress.android.ui.prefs.PrefsEvents;
import org.wordpress.android.util.GravatarUtils;
import org.wordpress.android.util.HelpshiftHelper.Tag;
import org.wordpress.android.widgets.WPNetworkImageView;
import java.lang.ref.WeakReference;
+import de.greenrobot.event.EventBus;
+
public class MeFragment extends Fragment {
private static final String IS_DISCONNECTING = "IS_DISCONNECTING";
@@ -36,6 +39,7 @@ public class MeFragment extends Fragment {
private TextView mDisplayNameTextView;
private TextView mUsernameTextView;
private TextView mLoginLogoutTextView;
+ private View mMyProfileView;
private View mNotificationsView;
private View mNotificationsDividerView;
private ProgressDialog mDisconnectProgressDialog;
@@ -54,12 +58,20 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container,
mDisplayNameTextView = (TextView) rootView.findViewById(R.id.me_display_name);
mUsernameTextView = (TextView) rootView.findViewById(R.id.me_username);
mLoginLogoutTextView = (TextView) rootView.findViewById(R.id.me_login_logout_text_view);
+ mMyProfileView = rootView.findViewById(R.id.row_my_profile);
mNotificationsView = rootView.findViewById(R.id.row_notifications);
mNotificationsDividerView = rootView.findViewById(R.id.me_notifications_divider);
addDropShadowToAvatar();
refreshAccountDetails();
+ mMyProfileView.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ ActivityLauncher.viewMyProfile(getActivity());
+ }
+ });
+
rootView.findViewById(R.id.row_settings).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
@@ -108,6 +120,19 @@ public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
}
+ @Override
+ public void onStop() {
+ EventBus.getDefault().unregister(this);
+ super.onStop();
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
+ refreshAccountDetails();
+ EventBus.getDefault().register(this);
+ }
+
@Override
public void onDestroy() {
if (mDisconnectProgressDialog != null) {
@@ -141,6 +166,7 @@ private void refreshAccountDetails() {
mDisplayNameTextView.setVisibility(View.VISIBLE);
mUsernameTextView.setVisibility(View.VISIBLE);
mAvatarFrame.setVisibility(View.VISIBLE);
+ mMyProfileView.setVisibility(View.VISIBLE);
mNotificationsView.setVisibility(View.VISIBLE);
mNotificationsDividerView.setVisibility(View.VISIBLE);
@@ -161,6 +187,7 @@ private void refreshAccountDetails() {
mDisplayNameTextView.setVisibility(View.GONE);
mUsernameTextView.setVisibility(View.GONE);
mAvatarFrame.setVisibility(View.GONE);
+ mMyProfileView.setVisibility(View.GONE);
mNotificationsView.setVisibility(View.GONE);
mNotificationsDividerView.setVisibility(View.GONE);
mLoginLogoutTextView.setText(R.string.me_connect_to_wordpress_com);
@@ -227,4 +254,8 @@ protected void onPostExecute(Void aVoid) {
mDisconnectProgressDialog = null;
}
}
+
+ public void onEventMainThread(PrefsEvents.MyProfileDetailsChanged event) {
+ refreshAccountDetails();
+ }
}
diff --git a/WordPress/src/main/java/org/wordpress/android/ui/prefs/MyProfileActivity.java b/WordPress/src/main/java/org/wordpress/android/ui/prefs/MyProfileActivity.java
new file mode 100644
index 000000000000..9b642f8a2cb4
--- /dev/null
+++ b/WordPress/src/main/java/org/wordpress/android/ui/prefs/MyProfileActivity.java
@@ -0,0 +1,149 @@
+package org.wordpress.android.ui.prefs;
+
+import android.os.Bundle;
+import android.support.v7.app.ActionBar;
+import android.support.v7.app.AppCompatActivity;
+import android.text.TextUtils;
+import android.view.MenuItem;
+import android.view.View;
+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.ui.ActivityLauncher;
+import org.wordpress.android.util.DialogUtils;
+import org.wordpress.android.util.StringUtils;
+import org.wordpress.android.widgets.WPTextView;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import de.greenrobot.event.EventBus;
+
+public class MyProfileActivity extends AppCompatActivity {
+
+ private WPTextView mFirstName;
+ private WPTextView mLastName;
+ private WPTextView mDisplayName;
+ private WPTextView mAboutMe;
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ AccountHelper.getDefaultAccount().fetchAccountSettings();
+
+ ActionBar actionBar = getSupportActionBar();
+ if (actionBar != null) {
+ actionBar.setHomeButtonEnabled(true);
+ actionBar.setDisplayHomeAsUpEnabled(true);
+ }
+ setContentView(R.layout.my_profile_activity);
+
+ mFirstName = (WPTextView) findViewById(R.id.first_name);
+ mLastName = (WPTextView) findViewById(R.id.last_name);
+ mDisplayName = (WPTextView) findViewById(R.id.display_name);
+ mAboutMe = (WPTextView) findViewById(R.id.about_me);
+
+ refreshDetails();
+
+ findViewById(R.id.first_name_row).setOnClickListener(createOnClickListener(getString(R.string.first_name), null, mFirstName));
+ findViewById(R.id.last_name_row).setOnClickListener(createOnClickListener(getString(R.string.last_name), null, mLastName));
+ findViewById(R.id.display_name_row).setOnClickListener(createOnClickListener(getString(R.string.public_display_name), getString(R.string.public_display_name_hint), mDisplayName));
+ findViewById(R.id.about_me_row).setOnClickListener(createOnClickListener(getString(R.string.about_me), getString(R.string.about_me_hint), mAboutMe));
+ }
+
+ @Override
+ public void finish() {
+ super.finish();
+ ActivityLauncher.slideOutToRight(this);
+ }
+
+ @Override
+ protected void onStop() {
+ EventBus.getDefault().unregister(this);
+ super.onStop();
+ }
+
+ @Override
+ protected void onStart() {
+ super.onStart();
+ EventBus.getDefault().register(this);
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(final MenuItem item) {
+ if (item.getItemId() == android.R.id.home) {
+ onBackPressed();
+ return true;
+ }
+ return super.onOptionsItemSelected(item);
+ }
+
+ private void refreshDetails() {
+ 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 updateMyProfileForLabel(TextView textView) {
+ Map params = new HashMap<>();
+ params.put(restParamForTextView(textView), textView.getText().toString());
+ AccountHelper.getDefaultAccount().postAccountSettings(params);
+ }
+
+ 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) {
+ return new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ DialogUtils.showMyProfileDialog(MyProfileActivity.this, dialogTitle, textView.getText().toString(), hint, new DialogUtils.Callback() {
+ @Override
+ public void onSuccessfulInput(String input) {
+ updateLabel(textView, input);
+ updateMyProfileForLabel(textView);
+ }
+ });
+ }
+ };
+ }
+
+ // helper method to get the rest parameter for a text view
+ private String restParamForTextView(TextView textView) {
+ Account.RestParam param = null;
+ if (textView == mFirstName) {
+ param = Account.RestParam.FIRST_NAME;
+ } else if (textView == mLastName) {
+ param = Account.RestParam.LAST_NAME;
+ } else if (textView == mDisplayName) {
+ param = Account.RestParam.DISPLAY_NAME;
+ } else if (textView == mAboutMe) {
+ param = Account.RestParam.ABOUT_ME;
+ }
+ return Account.RestParam.toString(param);
+ }
+
+ public void onEventMainThread(PrefsEvents.MyProfileDetailsChanged event) {
+ if (!isFinishing()) {
+ refreshDetails();
+ }
+ }
+}
diff --git a/WordPress/src/main/java/org/wordpress/android/ui/prefs/PrefsEvents.java b/WordPress/src/main/java/org/wordpress/android/ui/prefs/PrefsEvents.java
new file mode 100644
index 000000000000..8fa04f078dd1
--- /dev/null
+++ b/WordPress/src/main/java/org/wordpress/android/ui/prefs/PrefsEvents.java
@@ -0,0 +1,5 @@
+package org.wordpress.android.ui.prefs;
+
+public class PrefsEvents {
+ public static class MyProfileDetailsChanged {}
+}
diff --git a/WordPress/src/main/java/org/wordpress/android/util/DialogUtils.java b/WordPress/src/main/java/org/wordpress/android/util/DialogUtils.java
new file mode 100644
index 000000000000..ea30a72e5ab1
--- /dev/null
+++ b/WordPress/src/main/java/org/wordpress/android/util/DialogUtils.java
@@ -0,0 +1,58 @@
+package org.wordpress.android.util;
+
+import android.app.AlertDialog;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.text.TextUtils;
+import android.view.LayoutInflater;
+import android.view.View;
+
+import org.wordpress.android.R;
+import org.wordpress.android.widgets.OpenSansEditText;
+import org.wordpress.android.widgets.WPTextView;
+
+public class DialogUtils {
+ public static void showMyProfileDialog(Context context, String title, String initialText, String hint, final Callback callback) {
+ LayoutInflater layoutInflater = LayoutInflater.from(context);
+ View promptView = layoutInflater.inflate(R.layout.my_profile_dialog, null);
+ AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(context);
+ alertDialogBuilder.setView(promptView);
+
+ final WPTextView textView = (WPTextView) promptView.findViewById(R.id.my_profile_dialog_label);
+ final OpenSansEditText editText = (OpenSansEditText) promptView.findViewById(R.id.my_profile_dialog_input);
+ final WPTextView hintView = (WPTextView) promptView.findViewById(R.id.my_profile_dialog_hint);
+
+ textView.setText(title);
+ if (!TextUtils.isEmpty(hint)) {
+ hintView.setText(hint);
+ }
+ else {
+ hintView.setVisibility(View.GONE);
+ }
+
+ if (!TextUtils.isEmpty(initialText)) {
+ editText.setText(initialText);
+ editText.setSelection(0, initialText.length());
+ }
+
+ alertDialogBuilder.setCancelable(true)
+ .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int id) {
+ callback.onSuccessfulInput(editText.getText().toString());
+ }
+ })
+ .setNegativeButton(R.string.cancel,
+ new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int id) {
+ dialog.cancel();
+ }
+ });
+
+ AlertDialog alert = alertDialogBuilder.create();
+ alert.show();
+ }
+
+ public interface Callback {
+ void onSuccessfulInput(String input);
+ }
+}
diff --git a/WordPress/src/main/res/drawable-hdpi/me_icon_account_settings.png b/WordPress/src/main/res/drawable-hdpi/me_icon_account_settings.png
new file mode 100644
index 000000000000..f5285b4f5cb8
Binary files /dev/null and b/WordPress/src/main/res/drawable-hdpi/me_icon_account_settings.png differ
diff --git a/WordPress/src/main/res/drawable-hdpi/me_icon_login_logout.png b/WordPress/src/main/res/drawable-hdpi/me_icon_login_logout.png
index 0a147a3e3f83..a36bba233e1d 100644
Binary files a/WordPress/src/main/res/drawable-hdpi/me_icon_login_logout.png and b/WordPress/src/main/res/drawable-hdpi/me_icon_login_logout.png differ
diff --git a/WordPress/src/main/res/drawable-hdpi/me_icon_settings.png b/WordPress/src/main/res/drawable-hdpi/me_icon_my_profile.png
old mode 100755
new mode 100644
similarity index 100%
rename from WordPress/src/main/res/drawable-hdpi/me_icon_settings.png
rename to WordPress/src/main/res/drawable-hdpi/me_icon_my_profile.png
diff --git a/WordPress/src/main/res/drawable-hdpi/me_icon_notifications.png b/WordPress/src/main/res/drawable-hdpi/me_icon_notifications.png
old mode 100755
new mode 100644
diff --git a/WordPress/src/main/res/drawable-hdpi/me_icon_support.png b/WordPress/src/main/res/drawable-hdpi/me_icon_support.png
index 0ee051e23eb0..7561db04dd1d 100644
Binary files a/WordPress/src/main/res/drawable-hdpi/me_icon_support.png and b/WordPress/src/main/res/drawable-hdpi/me_icon_support.png differ
diff --git a/WordPress/src/main/res/drawable-xhdpi/me_icon_account_settings.png b/WordPress/src/main/res/drawable-xhdpi/me_icon_account_settings.png
new file mode 100644
index 000000000000..0f1fbd5a74a1
Binary files /dev/null and b/WordPress/src/main/res/drawable-xhdpi/me_icon_account_settings.png differ
diff --git a/WordPress/src/main/res/drawable-xhdpi/me_icon_login_logout.png b/WordPress/src/main/res/drawable-xhdpi/me_icon_login_logout.png
index 3a5d1cf6667d..4373360d75fc 100644
Binary files a/WordPress/src/main/res/drawable-xhdpi/me_icon_login_logout.png and b/WordPress/src/main/res/drawable-xhdpi/me_icon_login_logout.png differ
diff --git a/WordPress/src/main/res/drawable-xhdpi/me_icon_settings.png b/WordPress/src/main/res/drawable-xhdpi/me_icon_my_profile.png
old mode 100755
new mode 100644
similarity index 100%
rename from WordPress/src/main/res/drawable-xhdpi/me_icon_settings.png
rename to WordPress/src/main/res/drawable-xhdpi/me_icon_my_profile.png
diff --git a/WordPress/src/main/res/drawable-xhdpi/me_icon_notifications.png b/WordPress/src/main/res/drawable-xhdpi/me_icon_notifications.png
old mode 100755
new mode 100644
diff --git a/WordPress/src/main/res/drawable-xhdpi/me_icon_support.png b/WordPress/src/main/res/drawable-xhdpi/me_icon_support.png
index ef3af62083bf..3bb07bd24f07 100644
Binary files a/WordPress/src/main/res/drawable-xhdpi/me_icon_support.png and b/WordPress/src/main/res/drawable-xhdpi/me_icon_support.png differ
diff --git a/WordPress/src/main/res/drawable-xxhdpi/me_icon_account_settings.png b/WordPress/src/main/res/drawable-xxhdpi/me_icon_account_settings.png
new file mode 100644
index 000000000000..78dac6b9caaa
Binary files /dev/null and b/WordPress/src/main/res/drawable-xxhdpi/me_icon_account_settings.png differ
diff --git a/WordPress/src/main/res/drawable-xxhdpi/me_icon_login_logout.png b/WordPress/src/main/res/drawable-xxhdpi/me_icon_login_logout.png
index 6efd45d4a938..f174c9119e32 100644
Binary files a/WordPress/src/main/res/drawable-xxhdpi/me_icon_login_logout.png and b/WordPress/src/main/res/drawable-xxhdpi/me_icon_login_logout.png differ
diff --git a/WordPress/src/main/res/drawable-xxhdpi/me_icon_settings.png b/WordPress/src/main/res/drawable-xxhdpi/me_icon_my_profile.png
old mode 100755
new mode 100644
similarity index 100%
rename from WordPress/src/main/res/drawable-xxhdpi/me_icon_settings.png
rename to WordPress/src/main/res/drawable-xxhdpi/me_icon_my_profile.png
diff --git a/WordPress/src/main/res/drawable-xxhdpi/me_icon_notifications.png b/WordPress/src/main/res/drawable-xxhdpi/me_icon_notifications.png
old mode 100755
new mode 100644
diff --git a/WordPress/src/main/res/drawable-xxhdpi/me_icon_support.png b/WordPress/src/main/res/drawable-xxhdpi/me_icon_support.png
index 9e2584ab363e..58482a5d6a20 100644
Binary files a/WordPress/src/main/res/drawable-xxhdpi/me_icon_support.png and b/WordPress/src/main/res/drawable-xxhdpi/me_icon_support.png differ
diff --git a/WordPress/src/main/res/layout/me_fragment.xml b/WordPress/src/main/res/layout/me_fragment.xml
index f943bd62918e..ba8ad040970a 100644
--- a/WordPress/src/main/res/layout/me_fragment.xml
+++ b/WordPress/src/main/res/layout/me_fragment.xml
@@ -53,15 +53,34 @@
tools:text="username" />
+
+
+
+
+
+
+
+
+
+
+ android:src="@drawable/me_icon_account_settings" />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/WordPress/src/main/res/layout/my_profile_dialog.xml b/WordPress/src/main/res/layout/my_profile_dialog.xml
new file mode 100644
index 000000000000..bae10acf3f64
--- /dev/null
+++ b/WordPress/src/main/res/layout/my_profile_dialog.xml
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/WordPress/src/main/res/values/colors.xml b/WordPress/src/main/res/values/colors.xml
index e53edcf9d7f3..90ec870cc987 100644
--- a/WordPress/src/main/res/values/colors.xml
+++ b/WordPress/src/main/res/values/colors.xml
@@ -141,7 +141,7 @@
@color/grey_lighten_30
- #D8E3EA
+ #D8E3EA
@color/color_primary
@color/white
diff --git a/WordPress/src/main/res/values/strings.xml b/WordPress/src/main/res/values/strings.xml
index 00bc14fc6c56..d34f5b56aa0b 100644
--- a/WordPress/src/main/res/values/strings.xml
+++ b/WordPress/src/main/res/values/strings.xml
@@ -1110,4 +1110,13 @@
Selected Theme
Could not load theme
+
+ My Profile
+ First name
+ Last name
+ Public display name
+ Display name will default to your username if it is not set
+ About me
+ A few words about you…
+
diff --git a/WordPress/src/main/res/values/styles.xml b/WordPress/src/main/res/values/styles.xml
index e946a2814742..8133e03984b0 100644
--- a/WordPress/src/main/res/values/styles.xml
+++ b/WordPress/src/main/res/values/styles.xml
@@ -318,11 +318,39 @@
- match_parent
- 1dp
- center_vertical
- - @color/me_list_row_border
+ - @color/me_divider
+
+
+
+
+
+
+
+