diff --git a/WordPress/src/main/AndroidManifest.xml b/WordPress/src/main/AndroidManifest.xml index be660ec674f5..96c704496e84 100644 --- a/WordPress/src/main/AndroidManifest.xml +++ b/WordPress/src/main/AndroidManifest.xml @@ -316,6 +316,15 @@ android:theme="@style/CalypsoTheme" android:windowSoftInputMode="stateHidden"/> + + + + + AnalyticsTracker.track(AnalyticsTracker.Stat.OPENED_PEOPLE_MANAGEMENT); + } + public static void viewBlogSettingsForResult(Activity activity, Blog blog) { if (blog == null) return; @@ -250,6 +259,12 @@ public static void addSelfHostedSiteForResult(Activity activity) { activity.startActivityForResult(intent, RequestCodes.ADD_ACCOUNT); } + public static void viewPersonDetails(Context context, Person person) { + Intent intent = new Intent(context, PersonActivity.class); + intent.putExtra(PersonActivity.EXTRA_PERSON_ID, person.personID); + slideInFromRight(context, intent); + } + public static void slideInFromRight(Context context, Intent intent) { if (context instanceof Activity) { intent.putExtra(ARG_DID_SLIDE_IN_FROM_RIGHT, true); diff --git a/WordPress/src/main/java/org/wordpress/android/ui/main/MySiteFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/main/MySiteFragment.java index 0732f5896eb0..09164dfc254d 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/main/MySiteFragment.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/main/MySiteFragment.java @@ -186,6 +186,13 @@ public void onClick(View v) { } }); + rootView.findViewById(R.id.row_people).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + ActivityLauncher.viewCurrentBlogPeople(getActivity()); + } + }); + rootView.findViewById(R.id.row_settings).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { diff --git a/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleAdapter.java b/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleAdapter.java new file mode 100644 index 000000000000..39bea3bc1390 --- /dev/null +++ b/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleAdapter.java @@ -0,0 +1,100 @@ +package org.wordpress.android.ui.people; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.TextView; + +import org.wordpress.android.R; +import org.wordpress.android.models.Person; +import org.wordpress.android.models.Role; +import org.wordpress.android.util.GravatarUtils; +import org.wordpress.android.widgets.WPNetworkImageView; + +import java.util.ArrayList; +import java.util.List; + +public class PeopleAdapter extends BaseAdapter { + private final Context mContext; + private final LayoutInflater mInflater; + private List mPersonList; + private int mAvatarSz; + + public PeopleAdapter(Context context) { + mContext = context; + mAvatarSz = context.getResources().getDimensionPixelSize(R.dimen.avatar_sz_medium); + mInflater = LayoutInflater.from(context); + mPersonList = new ArrayList<>(); + mPersonList.add(new Person(1, "beaulebens", "Beau", "Lebens", "Beau", "http://lorempixum.com/76/76", Role.ADMIN)); + mPersonList.add(new Person(2, "ebinnion", "Eric", "Binnion", "Eric", "http://lorempixum.com/76/76", Role.AUTHOR)); + mPersonList.add(new Person(3, "javialvarez", "Javi", "Alvarez", "Javi", "http://lorempixum.com/76/76", Role.CONTRIBUTOR)); + mPersonList.add(new Person(4, "oguzkocer", "Oguz", "Kocer", "Oguz", "http://lorempixum.com/76/76", Role.EDITOR)); + } + + @Override + public int getCount() { + if (mPersonList == null) { + return 0; + } + return mPersonList.size(); + } + + @Override + public Person getItem(int position) { + if (mPersonList == null) { + return null; + } + return mPersonList.get(position); + } + + @Override + public long getItemId(int position) { + Person person = getItem(position); + if (person == null) { + return 0; + } + return person.personID; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + final PeopleViewHolder holder; + + if (convertView == null || convertView.getTag() == null) { + convertView = mInflater.inflate(R.layout.people_list_row, parent, false); + holder = new PeopleViewHolder(convertView); + convertView.setTag(holder); + } else { + holder = (PeopleViewHolder) convertView.getTag(); + } + + Person person = getItem(position); + + if (person != null) { + String avatarUrl = GravatarUtils.fixGravatarUrl(person.getImageUrl(), mAvatarSz); + holder.imgAvatar.setImageUrl(avatarUrl, WPNetworkImageView.ImageType.AVATAR); + holder.txtDisplayName.setText(person.getDisplayName()); + holder.txtUsername.setText(person.getUsername()); + holder.txtRole.setText(Role.toString(mContext, person.getRole())); + holder.txtRole.setBackgroundColor(Role.backgroundColor(mContext, person.getRole())); + } + + return convertView; + } + + private class PeopleViewHolder { + private final WPNetworkImageView imgAvatar; + private final TextView txtDisplayName; + private final TextView txtUsername; + private final TextView txtRole; + + PeopleViewHolder(View row) { + imgAvatar = (WPNetworkImageView) row.findViewById(R.id.people_list_row_avatar); + txtDisplayName = (TextView) row.findViewById(R.id.people_list_row_display_name); + txtUsername = (TextView) row.findViewById(R.id.people_list_row_username); + txtRole = (TextView) row.findViewById(R.id.people_list_row_role); + } + } +} \ No newline at end of file diff --git a/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleManagementActivity.java b/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleManagementActivity.java new file mode 100644 index 000000000000..5c03c29a8ad8 --- /dev/null +++ b/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleManagementActivity.java @@ -0,0 +1,58 @@ +package org.wordpress.android.ui.people; + +import android.app.Activity; +import android.os.Bundle; +import android.support.v7.app.ActionBar; +import android.support.v7.app.AppCompatActivity; +import android.view.MenuItem; +import android.view.View; +import android.widget.AdapterView; +import android.widget.ListView; + +import org.wordpress.android.R; +import org.wordpress.android.models.Person; +import org.wordpress.android.ui.ActivityLauncher; + +public class PeopleManagementActivity extends AppCompatActivity { + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + ActionBar actionBar = getSupportActionBar(); + if (actionBar != null) { + actionBar.setHomeButtonEnabled(true); + actionBar.setDisplayHomeAsUpEnabled(true); + } + setContentView(R.layout.people_management_activity); + + setTitle(R.string.people); + + ListView listView = (ListView)findViewById(android.R.id.list); + listView.setAdapter(new PeopleAdapter(this)); + + final Activity context = this; + listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + Person person = (Person) parent.getItemAtPosition(position); + ActivityLauncher.viewPersonDetails(context, person); + } + }); + } + + @Override + public void finish() { + super.finish(); + ActivityLauncher.slideOutToRight(this); + } + + @Override + public boolean onOptionsItemSelected(final MenuItem item) { + if (item.getItemId() == android.R.id.home) { + onBackPressed(); + return true; + } + return super.onOptionsItemSelected(item); + } +} diff --git a/WordPress/src/main/java/org/wordpress/android/ui/people/PersonActivity.java b/WordPress/src/main/java/org/wordpress/android/ui/people/PersonActivity.java new file mode 100644 index 000000000000..7dbcc333f1bf --- /dev/null +++ b/WordPress/src/main/java/org/wordpress/android/ui/people/PersonActivity.java @@ -0,0 +1,83 @@ +package org.wordpress.android.ui.people; + +import android.os.Bundle; +import android.support.v7.app.ActionBar; +import android.support.v7.app.AppCompatActivity; +import android.view.MenuItem; +import android.view.View; +import android.widget.TextView; + +import org.wordpress.android.R; +import org.wordpress.android.datasets.PersonTable; +import org.wordpress.android.models.Person; +import org.wordpress.android.models.Role; +import org.wordpress.android.ui.ActivityLauncher; +import org.wordpress.android.util.GravatarUtils; +import org.wordpress.android.widgets.WPNetworkImageView; + +public class PersonActivity extends AppCompatActivity { + public static final String EXTRA_PERSON_ID = "EXTRA_PERSON_ID"; + + private int mPersonId; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + mPersonId = getIntent().getExtras().getInt(EXTRA_PERSON_ID); + + ActionBar actionBar = getSupportActionBar(); + if (actionBar != null) { + actionBar.setHomeButtonEnabled(true); + actionBar.setDisplayHomeAsUpEnabled(true); + } + setContentView(R.layout.person_activity); + + setTitle(R.string.edit_user); + + refreshUserDetails(); + } + + @Override + public void finish() { + super.finish(); + ActivityLauncher.slideOutToRight(this); + } + + @Override + public boolean onOptionsItemSelected(final MenuItem item) { + if (item.getItemId() == android.R.id.home) { + onBackPressed(); + return true; + } + return super.onOptionsItemSelected(item); + } + + private void refreshUserDetails() { + WPNetworkImageView imgAvatar = (WPNetworkImageView) findViewById(R.id.person_avatar); + TextView txtDisplayName = (TextView) findViewById(R.id.person_display_name); + TextView txtUsername = (TextView) findViewById(R.id.person_username); + TextView txtRole = (TextView) findViewById(R.id.person_role); + TextView txtRemove = (TextView) findViewById(R.id.person_remove); + + Person person = PersonTable.getPerson(mPersonId); + + if (person != null) { + int avatarSz = getResources().getDimensionPixelSize(R.dimen.avatar_sz_large); + String avatarUrl = GravatarUtils.fixGravatarUrl(person.getImageUrl(), avatarSz); + + imgAvatar.setImageUrl(avatarUrl, WPNetworkImageView.ImageType.AVATAR); + txtDisplayName.setText(person.getDisplayName()); + txtUsername.setText(person.getUsername()); + txtRole.setText(Role.toString(this, person.getRole())); + txtRemove.setText(String.format(getString(R.string.remove_user), person.getFirstName().toUpperCase())); + + txtRemove.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + // remove user + } + }); + } + } +} diff --git a/WordPress/src/main/res/layout/my_site_fragment.xml b/WordPress/src/main/res/layout/my_site_fragment.xml index dc315302f9ff..35a552b63644 100644 --- a/WordPress/src/main/res/layout/my_site_fragment.xml +++ b/WordPress/src/main/res/layout/my_site_fragment.xml @@ -266,6 +266,25 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/WordPress/src/main/res/layout/people_management_activity.xml b/WordPress/src/main/res/layout/people_management_activity.xml new file mode 100644 index 000000000000..08332b249e8c --- /dev/null +++ b/WordPress/src/main/res/layout/people_management_activity.xml @@ -0,0 +1,16 @@ + + + + + + \ No newline at end of file diff --git a/WordPress/src/main/res/layout/person_activity.xml b/WordPress/src/main/res/layout/person_activity.xml new file mode 100644 index 000000000000..9768ccd25f72 --- /dev/null +++ b/WordPress/src/main/res/layout/person_activity.xml @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/WordPress/src/main/res/values/dimens.xml b/WordPress/src/main/res/values/dimens.xml index 3cedd92c32ca..29daba438459 100644 --- a/WordPress/src/main/res/values/dimens.xml +++ b/WordPress/src/main/res/values/dimens.xml @@ -216,4 +216,7 @@ 8dp 400dp + + 84dp + diff --git a/WordPress/src/main/res/values/strings.xml b/WordPress/src/main/res/values/strings.xml index 9b13b92c3459..eb74d1e5ef8d 100644 --- a/WordPress/src/main/res/values/strings.xml +++ b/WordPress/src/main/res/values/strings.xml @@ -1099,5 +1099,17 @@ Something went wrong. Could not activate theme Theme Web Activity Could not load theme + + + People + Edit User + Role + Super Admin + Admin + Editor + Author + Contributor + Unsupported + REMOVE %s