From 71ee9306c68c388835206e940d5e0ecfa5089c39 Mon Sep 17 00:00:00 2001 From: yangguang <12301052@bjtu.edu.cn> Date: Thu, 7 Jul 2016 11:57:31 +0800 Subject: [PATCH 1/5] fix:big image makes layout error, include note item, issue item, user item --- .../java/com/bd/gitlab/util/BitmapUtil.java | 41 +++++++++++++++++++ .../java/com/bd/gitlab/util/DensityUtil.java | 24 +++++++++++ .../com/bd/gitlab/views/CompoundTextView.java | 3 ++ app/src/main/res/layout/list_item.xml | 4 +- app/src/main/res/layout/note_list_item.xml | 7 ++-- app/src/main/res/layout/user_list_item.xml | 4 +- 6 files changed, 77 insertions(+), 6 deletions(-) create mode 100644 app/src/main/java/com/bd/gitlab/util/BitmapUtil.java create mode 100644 app/src/main/java/com/bd/gitlab/util/DensityUtil.java diff --git a/app/src/main/java/com/bd/gitlab/util/BitmapUtil.java b/app/src/main/java/com/bd/gitlab/util/BitmapUtil.java new file mode 100644 index 0000000..90b0eb9 --- /dev/null +++ b/app/src/main/java/com/bd/gitlab/util/BitmapUtil.java @@ -0,0 +1,41 @@ +package com.bd.gitlab.util; + +import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.graphics.Matrix; +import android.graphics.PixelFormat; +import android.graphics.drawable.BitmapDrawable; +import android.graphics.drawable.Drawable; + +/** + * Created by yangguang on 2016/7/7. + */ +public class BitmapUtil { + public static Bitmap drawableToBitmap(Drawable drawable) // drawable 转换成 bitmap + { + int width = drawable.getIntrinsicWidth(); // 取 drawable 的长宽 + int height = drawable.getIntrinsicHeight(); + Bitmap.Config config = drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888 : Bitmap.Config.RGB_565; // 取 drawable 的颜色格式 + Bitmap bitmap = Bitmap.createBitmap(width, height, config); // 建立对应 bitmap + Canvas canvas = new Canvas(bitmap); // 建立对应 bitmap 的画布 + drawable.setBounds(0, 0, width, height); + drawable.draw(canvas); // 把 drawable 内容画到画布中 + return bitmap; + } + + public static Drawable zoomDrawable(Drawable drawable, int w, int h) { + if(drawable == null){ + return drawable; + } + int width = drawable.getIntrinsicWidth(); + int height = drawable.getIntrinsicHeight(); + Bitmap oldbmp = drawableToBitmap(drawable); // drawable 转换成 bitmap + Matrix matrix = new Matrix(); // 创建操作图片用的 Matrix 对象 + float scaleWidth = ((float) w / width); // 计算缩放比例 + float scaleHeight = ((float) h / height); + matrix.postScale(scaleWidth, scaleHeight); // 设置缩放比例 + Bitmap newbmp = Bitmap.createBitmap(oldbmp, 0, 0, width, height, matrix, true); // 建立新的 bitmap ,其内容是对原 bitmap 的缩放后的图 + return new BitmapDrawable(newbmp); // 把 bitmap 转换成 drawable 并返回 + } + +} diff --git a/app/src/main/java/com/bd/gitlab/util/DensityUtil.java b/app/src/main/java/com/bd/gitlab/util/DensityUtil.java new file mode 100644 index 0000000..960167c --- /dev/null +++ b/app/src/main/java/com/bd/gitlab/util/DensityUtil.java @@ -0,0 +1,24 @@ +package com.bd.gitlab.util; + +import android.content.Context; + +/** + * Created by yangguang on 2016/7/7. + */ +public class DensityUtil { + /** + * 根据手机的分辨率从 dp 的单位 转成为 px(像素) + */ + public static int dip2px(Context context, float dpValue) { + final float scale = context.getResources().getDisplayMetrics().density; + return (int) (dpValue * scale + 0.5f); + } + + /** + * 根据手机的分辨率从 px(像素) 的单位 转成为 dp + */ + public static int px2dip(Context context, float pxValue) { + final float scale = context.getResources().getDisplayMetrics().density; + return (int) (pxValue / scale + 0.5f); + } +} diff --git a/app/src/main/java/com/bd/gitlab/views/CompoundTextView.java b/app/src/main/java/com/bd/gitlab/views/CompoundTextView.java index d37721c..2c3b62d 100644 --- a/app/src/main/java/com/bd/gitlab/views/CompoundTextView.java +++ b/app/src/main/java/com/bd/gitlab/views/CompoundTextView.java @@ -7,6 +7,8 @@ import android.util.AttributeSet; import android.widget.TextView; +import com.bd.gitlab.util.BitmapUtil; +import com.bd.gitlab.util.DensityUtil; import com.squareup.picasso.Picasso; import com.squareup.picasso.Target; @@ -40,6 +42,7 @@ public void onPrepareLoad(Drawable placeHolderDrawable) { } private void setImage(Drawable drawable) { + drawable = BitmapUtil.zoomDrawable(drawable, DensityUtil.dip2px(getContext(),90), DensityUtil.dip2px(getContext(),90)); this.setCompoundDrawablesWithIntrinsicBounds(drawable, null, null, null); } } diff --git a/app/src/main/res/layout/list_item.xml b/app/src/main/res/layout/list_item.xml index faf258e..cfa3b02 100644 --- a/app/src/main/res/layout/list_item.xml +++ b/app/src/main/res/layout/list_item.xml @@ -6,7 +6,9 @@ android:gravity="center_vertical" android:minHeight="?android:attr/listPreferredItemHeight" android:paddingRight="?android:attr/scrollbarSize" - android:paddingLeft="8dp" > + android:paddingLeft="8dp" + android:paddingTop="8dp" + android:paddingBottom="8dp"> + android:orientation="horizontal" + android:paddingTop="15dp"> From 2508440f679ac55fd06bfbdfa39dc633720ad790 Mon Sep 17 00:00:00 2001 From: yangguang <12301052@bjtu.edu.cn> Date: Thu, 14 Jul 2016 20:15:29 +0800 Subject: [PATCH 2/5] add:add the profile interface,without UI --- app/src/main/AndroidManifest.xml | 9 +- .../main/java/com/bd/gitlab/MainActivity.java | 4 + .../java/com/bd/gitlab/ProfileActivity.java | 37 +++++ .../main/java/com/bd/gitlab/model/User.java | 142 ++++++++++++++++++ .../java/com/bd/gitlab/tools/GitLabAPI.java | 4 +- .../main/java/com/bd/gitlab/util/Content.java | 9 ++ app/src/main/res/layout/activity_profile.xml | 5 + app/src/main/res/menu/main.xml | 6 + app/src/main/res/values/strings.xml | 1 + gitlab-android.iml | 19 +++ 10 files changed, 234 insertions(+), 2 deletions(-) create mode 100644 app/src/main/java/com/bd/gitlab/ProfileActivity.java create mode 100644 app/src/main/java/com/bd/gitlab/util/Content.java create mode 100644 app/src/main/res/layout/activity_profile.xml create mode 100644 gitlab-android.iml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 71032fc..3d6d60f 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -50,7 +50,14 @@ android:name="android.support.PARENT_ACTIVITY" android:value="com.bd.gitlab.MainActivity" /> - + + + \ No newline at end of file diff --git a/app/src/main/java/com/bd/gitlab/MainActivity.java b/app/src/main/java/com/bd/gitlab/MainActivity.java index 995947f..725c854 100644 --- a/app/src/main/java/com/bd/gitlab/MainActivity.java +++ b/app/src/main/java/com/bd/gitlab/MainActivity.java @@ -188,6 +188,10 @@ public boolean onOptionsItemSelected(MenuItem item) { else setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED); return true; + case R.id.profile: + Intent i = new Intent(MainActivity.this,ProfileActivity.class); + startActivity(i); + return true; default: return super.onOptionsItemSelected(item); } diff --git a/app/src/main/java/com/bd/gitlab/ProfileActivity.java b/app/src/main/java/com/bd/gitlab/ProfileActivity.java new file mode 100644 index 0000000..2ddfbd4 --- /dev/null +++ b/app/src/main/java/com/bd/gitlab/ProfileActivity.java @@ -0,0 +1,37 @@ +package com.bd.gitlab; + +import android.app.Activity; +import android.os.Bundle; +import android.util.Log; + +import com.bd.gitlab.model.User; +import com.bd.gitlab.tools.Repository; + +import retrofit.Callback; +import retrofit.RetrofitError; +import retrofit.client.Response; + +/** + * Created by lenovo on 2016/7/14. + */ +public class ProfileActivity extends Activity{ + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_profile); + + Repository.getService().getUser(userCallback); + } + + private Callback userCallback = new Callback() { + @Override + public void success(User user, Response response) { + Log.v("=======","========"+user.getEmail()); + } + + @Override + public void failure(RetrofitError error) { + + } + }; +} diff --git a/app/src/main/java/com/bd/gitlab/model/User.java b/app/src/main/java/com/bd/gitlab/model/User.java index 7d5e7c8..c3b03f2 100644 --- a/app/src/main/java/com/bd/gitlab/model/User.java +++ b/app/src/main/java/com/bd/gitlab/model/User.java @@ -12,6 +12,19 @@ public class User { private boolean blocked; private Date created_at; private int access_level; + private String private_token; + private String state; + private String bio; + private String skype; + private String linkedin; + private String twitter; + private String website_url; + private int theme_id; + private int color_scheme_id; + private boolean is_admin; + private boolean can_create_group; + private boolean can_create_project; + private int projects_limit; public long getId() { return id; @@ -82,4 +95,133 @@ public boolean equals(Object obj) { return rhs.id == id; } + + + public String getAvatar_url() { + return avatar_url; + } + + public void setAvatar_url(String avatar_url) { + this.avatar_url = avatar_url; + } + + public Date getCreated_at() { + return created_at; + } + + public void setCreated_at(Date created_at) { + this.created_at = created_at; + } + + public int getAccess_level() { + return access_level; + } + + public void setAccess_level(int access_level) { + this.access_level = access_level; + } + + public String getPrivate_token() { + return private_token; + } + + public void setPrivate_token(String private_token) { + this.private_token = private_token; + } + + public String getState() { + return state; + } + + public void setState(String state) { + this.state = state; + } + + public String getBio() { + return bio; + } + + public void setBio(String bio) { + this.bio = bio; + } + + public String getSkype() { + return skype; + } + + public void setSkype(String skype) { + this.skype = skype; + } + + public String getLinkedin() { + return linkedin; + } + + public void setLinkedin(String linkedin) { + this.linkedin = linkedin; + } + + public String getTwitter() { + return twitter; + } + + public void setTwitter(String twitter) { + this.twitter = twitter; + } + + public String getWebsite_url() { + return website_url; + } + + public void setWebsite_url(String website_url) { + this.website_url = website_url; + } + + public int getTheme_id() { + return theme_id; + } + + public void setTheme_id(int theme_id) { + this.theme_id = theme_id; + } + + public int getColor_scheme_id() { + return color_scheme_id; + } + + public void setColor_scheme_id(int color_scheme_id) { + this.color_scheme_id = color_scheme_id; + } + + public boolean is_admin() { + return is_admin; + } + + public void setIs_admin(boolean is_admin) { + this.is_admin = is_admin; + } + + public boolean isCan_create_group() { + return can_create_group; + } + + public void setCan_create_group(boolean can_create_group) { + this.can_create_group = can_create_group; + } + + public boolean isCan_create_project() { + return can_create_project; + } + + public void setCan_create_project(boolean can_create_project) { + this.can_create_project = can_create_project; + } + + public int getProjects_limit() { + return projects_limit; + } + + public void setProjects_limit(int projects_limit) { + this.projects_limit = projects_limit; + } } diff --git a/app/src/main/java/com/bd/gitlab/tools/GitLabAPI.java b/app/src/main/java/com/bd/gitlab/tools/GitLabAPI.java index 9a45a42..c14176c 100644 --- a/app/src/main/java/com/bd/gitlab/tools/GitLabAPI.java +++ b/app/src/main/java/com/bd/gitlab/tools/GitLabAPI.java @@ -93,7 +93,9 @@ public interface GitLabAPI { void getBlob(@Path("id") long projectId, @Path("sha") String commitId, @Query("filepath") String path, Callback cb); /* --- USER --- */ - + @GET("/user") + void getUser(Callback cb); + @GET("/groups/{id}/members?per_page=100") void getGroupMembers(@Path("id") long groupId, Callback> cb); diff --git a/app/src/main/java/com/bd/gitlab/util/Content.java b/app/src/main/java/com/bd/gitlab/util/Content.java new file mode 100644 index 0000000..db2ef8e --- /dev/null +++ b/app/src/main/java/com/bd/gitlab/util/Content.java @@ -0,0 +1,9 @@ +package com.bd.gitlab.util; + +/** + * Created by yangguang on 2016/7/7. + */ +public class Content { + public static final String HOST_URL = "http://gitlab.task.ac.cn/"; +// public static final String USER_TOKEN = "sNCkfm4D_7sNmmLooefb"; +} diff --git a/app/src/main/res/layout/activity_profile.xml b/app/src/main/res/layout/activity_profile.xml new file mode 100644 index 0000000..6be9e57 --- /dev/null +++ b/app/src/main/res/layout/activity_profile.xml @@ -0,0 +1,5 @@ + + + + diff --git a/app/src/main/res/menu/main.xml b/app/src/main/res/menu/main.xml index 2a9e4c1..cca2a1d 100644 --- a/app/src/main/res/menu/main.xml +++ b/app/src/main/res/menu/main.xml @@ -1,6 +1,12 @@ + + DroidLab + Profile Lock orientation Logout Save diff --git a/gitlab-android.iml b/gitlab-android.iml new file mode 100644 index 0000000..a745aa7 --- /dev/null +++ b/gitlab-android.iml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file From 577bab2fa601de1ce8c11d1de78caa5b839a3ccc Mon Sep 17 00:00:00 2001 From: steveyg <372125992@qq.com> Date: Mon, 18 Jul 2016 19:28:59 +0800 Subject: [PATCH 3/5] =?UTF-8?q?add:=E5=A2=9E=E5=8A=A0=E9=BB=98=E8=AE=A4?= =?UTF-8?q?=E5=A4=B4=E5=83=8F=EF=BC=8C=E4=BF=AE=E6=94=B9=E5=A4=B4=E5=83=8F?= =?UTF-8?q?=E4=B8=BA=E5=9C=86=E5=BD=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/bd/gitlab/IssueActivity.java | 538 +++++++++--------- .../com/bd/gitlab/adapter/IssuesAdapter.java | 3 +- .../com/bd/gitlab/adapter/NoteAdapter.java | 3 +- .../com/bd/gitlab/adapter/UserAdapter.java | 3 +- .../com/bd/gitlab/views/CircleTransform.java | 61 ++ .../res/drawable-xhdpi/default_avatar.png | Bin 0 -> 5103 bytes 6 files changed, 341 insertions(+), 267 deletions(-) create mode 100644 app/src/main/java/com/bd/gitlab/views/CircleTransform.java create mode 100644 app/src/main/res/drawable-xhdpi/default_avatar.png diff --git a/app/src/main/java/com/bd/gitlab/IssueActivity.java b/app/src/main/java/com/bd/gitlab/IssueActivity.java index 7b2e67c..fdc23e6 100644 --- a/app/src/main/java/com/bd/gitlab/IssueActivity.java +++ b/app/src/main/java/com/bd/gitlab/IssueActivity.java @@ -44,270 +44,280 @@ import de.keyboardsurfer.android.widget.crouton.Style; public class IssueActivity extends Activity { - - @InjectView(R.id.scroll1) ScrollView scroll; - - @InjectView(R.id.title) TextView title; - @InjectView(R.id.state_spinner) Spinner stateSpinner; - @InjectView(R.id.assignee_spinner) Spinner assigneeSpinner; - @InjectView(R.id.milestone_spinner) Spinner milestoneSpinner; - @InjectView(R.id.description) TextView description; - @InjectView(R.id.note_list) ListView noteList; - - @InjectView(R.id.progressbar_loading) ProgressBar progressBar; - @InjectView(R.id.new_note_edit) EditText newNoteEdit; - - private ProgressDialog pd; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_issue); - ButterKnife.inject(this); - - if(Repository.selectedIssue != null) { - setupUI(); - loadNotes(); - } - else - finish(); - } - - @Override - public void onDestroy() { - super.onDestroy(); - - Crouton.cancelAllCroutons(); - } - - /** - * Set up the {@link android.app.ActionBar}. - */ - private void setupUI() { - long tempId = Repository.selectedIssue.getIid(); - if(tempId < 1) - tempId = Repository.selectedIssue.getId(); - - getActionBar().setDisplayHomeAsUpEnabled(true); + + @InjectView(R.id.scroll1) + ScrollView scroll; + + @InjectView(R.id.title) + TextView title; + @InjectView(R.id.state_spinner) + Spinner stateSpinner; + @InjectView(R.id.assignee_spinner) + Spinner assigneeSpinner; + @InjectView(R.id.milestone_spinner) + Spinner milestoneSpinner; + @InjectView(R.id.description) + TextView description; + @InjectView(R.id.note_list) + ListView noteList; + + @InjectView(R.id.progressbar_loading) + ProgressBar progressBar; + @InjectView(R.id.new_note_edit) + EditText newNoteEdit; + + private ProgressDialog pd; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_issue); + ButterKnife.inject(this); + + if (Repository.selectedIssue != null) { + setupUI(); + loadNotes(); + } else + finish(); + } + + @Override + public void onDestroy() { + super.onDestroy(); + + Crouton.cancelAllCroutons(); + } + + /** + * Set up the {@link android.app.ActionBar}. + */ + private void setupUI() { + long tempId = Repository.selectedIssue.getIid(); + if (tempId < 1) + tempId = Repository.selectedIssue.getId(); + + getActionBar().setDisplayHomeAsUpEnabled(true); getActionBar().setTitle("Issue #" + tempId); getActionBar().setIcon(getResources().getDrawable(R.drawable.ic_launcher)); - - title.setText(Repository.selectedIssue.getTitle()); - - ArrayList temp3 = new ArrayList(); - if(Repository.selectedIssue.getState().equals("opened")) { - temp3.add("opened"); - temp3.add("closed"); - } - else { - temp3.add("closed"); - temp3.add("reopened"); - } - stateSpinner.setAdapter(new ArrayAdapter(this, android.R.layout.simple_list_item_1, temp3)); - stateSpinner.setSelection(temp3.indexOf(Repository.selectedIssue.getState())); - - if(Repository.userAdapter != null) { - assigneeSpinner.setAdapter(Repository.userAdapter); - if(Repository.selectedIssue.getAssignee() != null) - assigneeSpinner.setSelection(Repository.userAdapter.getPosition(Repository.selectedIssue.getAssignee()), true); - } - else { - if(Repository.selectedIssue.getAssignee() != null) { - ArrayList temp = new ArrayList(); - temp.add(Repository.selectedIssue.getAssignee()); - assigneeSpinner.setAdapter(new UserAdapter(this, temp)); - } - - Repository.getService().getUsersFallback(Repository.selectedProject.getId(), usersCallback); - } - - ArrayList temp2 = new ArrayList(); - if(Repository.selectedIssue.getMilestone() != null) - temp2.add(Repository.selectedIssue.getMilestone()); - milestoneSpinner.setAdapter(new MilestonesAdapter(this, temp2)); - - Repository.getService().getMilestones(Repository.selectedProject.getId(), milestonesCallback); - - Bypass bypass = new Bypass(); - String desc = Repository.selectedIssue.getDescription(); - if(desc == null) - desc = ""; - description.setText(bypass.markdownToSpannable(desc)); - description.setMovementMethod(LinkMovementMethod.getInstance()); - - Repository.setListViewSize(noteList); - } - - @Override - public boolean onCreateOptionsMenu(Menu menu) { - getMenuInflater().inflate(R.menu.issue, menu); - return true; - } - - @Override - public boolean onOptionsItemSelected(MenuItem item) { - switch(item.getItemId()) { - case android.R.id.home: - finish(); - return true; - case R.id.action_save: - save(); - return true; - } - - return super.onOptionsItemSelected(item); - } - - private void loadNotes() { - progressBar.setVisibility(View.VISIBLE); - Repository.getService().getIssueNotes(Repository.selectedProject.getId(), Repository.selectedIssue.getId(), notesCallback); - } - - private Callback> notesCallback = new Callback>() { - - @Override - public void success(List notes, Response resp) { - progressBar.setVisibility(View.GONE); - - NoteAdapter noteAdapter = new NoteAdapter(IssueActivity.this, notes); - noteList.setAdapter(noteAdapter); - - Repository.setListViewSize(noteList); - } - - @Override - public void failure(RetrofitError e) { - RetrofitHelper.printDebugInfo(IssueActivity.this, e); - - progressBar.setVisibility(View.GONE); - Crouton.makeText(IssueActivity.this, R.string.connection_error, Style.ALERT).show(); - } - }; - - @OnClick(R.id.new_note_button) - public void onNewNoteClick() { - String body = newNoteEdit.getText().toString(); - - if(body.length() < 1) - return; - - pd = ProgressDialog.show(IssueActivity.this, "", getResources().getString(R.string.progress_dialog), true); - - // Clear text & collapse keyboard - InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); - imm.hideSoftInputFromWindow(newNoteEdit.getWindowToken(), 0); - newNoteEdit.setText(""); - - Repository.getService().postIssueNote(Repository.selectedProject.getId(), Repository.selectedIssue.getId(), body, noteCallback); - } - - private Callback noteCallback = new Callback() { - - @Override - public void success(Note note, Response resp) { - if(pd != null && pd.isShowing()) - pd.cancel(); - - ((NoteAdapter) noteList.getAdapter()).addNote(note); - Repository.setListViewSize(noteList); - - scroll.post(new Runnable() { - - @Override - public void run() { - // Scroll to bottom of list - scroll.fullScroll(View.FOCUS_DOWN); - } - }); - } - - @Override - public void failure(RetrofitError e) { - RetrofitHelper.printDebugInfo(IssueActivity.this, e); - - if(pd != null && pd.isShowing()) - pd.cancel(); - - Crouton.makeText(IssueActivity.this, R.string.connection_error, Style.ALERT).show(); - } - }; - - private void save() { - pd = ProgressDialog.show(IssueActivity.this, "", getResources().getString(R.string.progress_dialog), true); - - String selection = stateSpinner.getSelectedItem().toString(); - String value = ""; - if(selection.equals("closed") && (Repository.selectedIssue.getState().equals("opened") || Repository.selectedIssue.getState().equals("reopened"))) - value = "close"; - if((selection.equals("reopened") || selection.equals("opened")) && Repository.selectedIssue.getState().equals("closed")) - value = "reopen"; - - Repository.getService().editIssue(Repository.selectedProject.getId(), Repository.selectedIssue.getId(), value, assigneeSpinner.getSelectedItemId(), milestoneSpinner.getSelectedItemId(), issueCallback); - } - - private Callback issueCallback = new Callback() { - - @Override - public void success(Issue issue, Response resp) { - if(pd != null && pd.isShowing()) - pd.cancel(); - - Repository.selectedIssue.setState(stateSpinner.getSelectedItem().toString()); - Repository.selectedIssue.setAssignee((User) assigneeSpinner.getSelectedItem()); - Repository.selectedIssue.setMilestone((Milestone) milestoneSpinner.getSelectedItem()); - - if(Repository.issueAdapter != null) - Repository.issueAdapter.notifyDataSetChanged(); - } - - @Override - public void failure(RetrofitError e) { - RetrofitHelper.printDebugInfo(IssueActivity.this, e); - - if(pd != null && pd.isShowing()) - pd.cancel(); - - Crouton.makeText(IssueActivity.this, R.string.connection_error, Style.ALERT).show(); - } - }; - - private Callback> usersCallback = new Callback>() { - - @Override - public void success(List users, Response resp) { - progressBar.setVisibility(View.GONE); - - UserAdapter ua = new UserAdapter(IssueActivity.this, users); - assigneeSpinner.setAdapter(ua); - assigneeSpinner.setSelection(ua.getPosition(Repository.selectedIssue.getAssignee()), true); - } - - @Override - public void failure(RetrofitError e) { - RetrofitHelper.printDebugInfo(IssueActivity.this, e); - - progressBar.setVisibility(View.GONE); - Crouton.makeText(IssueActivity.this, R.string.connection_error, Style.ALERT).show(); - } - }; - - private Callback> milestonesCallback = new Callback>() { - - @Override - public void success(List milestones, Response resp) { - progressBar.setVisibility(View.GONE); - - MilestonesAdapter ma = new MilestonesAdapter(IssueActivity.this, milestones); - milestoneSpinner.setAdapter(ma); - milestoneSpinner.setSelection(ma.getPosition(Repository.selectedIssue.getMilestone()), true); - } - - @Override - public void failure(RetrofitError e) { - RetrofitHelper.printDebugInfo(IssueActivity.this, e); - - progressBar.setVisibility(View.GONE); - Crouton.makeText(IssueActivity.this, R.string.connection_error, Style.ALERT).show(); - } - }; + + title.setText(Repository.selectedIssue.getTitle()); + + ArrayList temp3 = new ArrayList(); + if (Repository.selectedIssue.getState().equals("opened")) { + temp3.add("opened"); + temp3.add("closed"); + } else { + temp3.add("closed"); + temp3.add("reopened"); + } + stateSpinner.setAdapter(new ArrayAdapter(this, android.R.layout.simple_list_item_1, temp3)); + stateSpinner.setSelection(temp3.indexOf(Repository.selectedIssue.getState())); + + if (Repository.userAdapter != null) { + assigneeSpinner.setAdapter(Repository.userAdapter); + if (Repository.selectedIssue.getAssignee() != null) + assigneeSpinner.setSelection(Repository.userAdapter.getPosition(Repository.selectedIssue.getAssignee()), true); + } else { + if (Repository.selectedIssue.getAssignee() != null) { + ArrayList temp = new ArrayList(); + temp.add(Repository.selectedIssue.getAssignee()); + assigneeSpinner.setAdapter(new UserAdapter(this, temp)); + } + + Repository.getService().getUsersFallback(Repository.selectedProject.getId(), usersCallback); + } + + ArrayList temp2 = new ArrayList(); + if (Repository.selectedIssue.getMilestone() != null) + temp2.add(Repository.selectedIssue.getMilestone()); + milestoneSpinner.setAdapter(new MilestonesAdapter(this, temp2)); + + if (milestoneSpinner.getAdapter().getCount() == 0) { + milestoneSpinner.setVisibility(View.GONE); + } + + Repository.getService().getMilestones(Repository.selectedProject.getId(), milestonesCallback); + + Bypass bypass = new Bypass(); + String desc = Repository.selectedIssue.getDescription(); + if (desc == null) + desc = ""; + description.setText(bypass.markdownToSpannable(desc)); + description.setMovementMethod(LinkMovementMethod.getInstance()); + + Repository.setListViewSize(noteList); + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + getMenuInflater().inflate(R.menu.issue, menu); + return true; + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case android.R.id.home: + finish(); + return true; + case R.id.action_save: + save(); + return true; + } + + return super.onOptionsItemSelected(item); + } + + private void loadNotes() { + progressBar.setVisibility(View.VISIBLE); + Repository.getService().getIssueNotes(Repository.selectedProject.getId(), Repository.selectedIssue.getId(), notesCallback); + } + + private Callback> notesCallback = new Callback>() { + + @Override + public void success(List notes, Response resp) { + progressBar.setVisibility(View.GONE); + + NoteAdapter noteAdapter = new NoteAdapter(IssueActivity.this, notes); + noteList.setAdapter(noteAdapter); + + Repository.setListViewSize(noteList); + } + + @Override + public void failure(RetrofitError e) { + RetrofitHelper.printDebugInfo(IssueActivity.this, e); + + progressBar.setVisibility(View.GONE); + Crouton.makeText(IssueActivity.this, R.string.connection_error, Style.ALERT).show(); + } + }; + + @OnClick(R.id.new_note_button) + public void onNewNoteClick() { + String body = newNoteEdit.getText().toString(); + + if (body.length() < 1) + return; + + pd = ProgressDialog.show(IssueActivity.this, "", getResources().getString(R.string.progress_dialog), true); + + // Clear text & collapse keyboard + InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + imm.hideSoftInputFromWindow(newNoteEdit.getWindowToken(), 0); + newNoteEdit.setText(""); + + Repository.getService().postIssueNote(Repository.selectedProject.getId(), Repository.selectedIssue.getId(), body, noteCallback); + } + + private Callback noteCallback = new Callback() { + + @Override + public void success(Note note, Response resp) { + if (pd != null && pd.isShowing()) + pd.cancel(); + + ((NoteAdapter) noteList.getAdapter()).addNote(note); + Repository.setListViewSize(noteList); + + scroll.post(new Runnable() { + + @Override + public void run() { + // Scroll to bottom of list + scroll.fullScroll(View.FOCUS_DOWN); + } + }); + } + + @Override + public void failure(RetrofitError e) { + RetrofitHelper.printDebugInfo(IssueActivity.this, e); + + if (pd != null && pd.isShowing()) + pd.cancel(); + + Crouton.makeText(IssueActivity.this, R.string.connection_error, Style.ALERT).show(); + } + }; + + private void save() { + pd = ProgressDialog.show(IssueActivity.this, "", getResources().getString(R.string.progress_dialog), true); + + String selection = stateSpinner.getSelectedItem().toString(); + String value = ""; + if (selection.equals("closed") && (Repository.selectedIssue.getState().equals("opened") || Repository.selectedIssue.getState().equals("reopened"))) + value = "close"; + if ((selection.equals("reopened") || selection.equals("opened")) && Repository.selectedIssue.getState().equals("closed")) + value = "reopen"; + + Repository.getService().editIssue(Repository.selectedProject.getId(), Repository.selectedIssue.getId(), value, assigneeSpinner.getSelectedItemId(), milestoneSpinner.getSelectedItemId(), issueCallback); + } + + private Callback issueCallback = new Callback() { + + @Override + public void success(Issue issue, Response resp) { + if (pd != null && pd.isShowing()) + pd.cancel(); + + Repository.selectedIssue.setState(stateSpinner.getSelectedItem().toString()); + Repository.selectedIssue.setAssignee((User) assigneeSpinner.getSelectedItem()); + Repository.selectedIssue.setMilestone((Milestone) milestoneSpinner.getSelectedItem()); + + if (Repository.issueAdapter != null) + Repository.issueAdapter.notifyDataSetChanged(); + } + + @Override + public void failure(RetrofitError e) { + RetrofitHelper.printDebugInfo(IssueActivity.this, e); + + if (pd != null && pd.isShowing()) + pd.cancel(); + + Crouton.makeText(IssueActivity.this, R.string.connection_error, Style.ALERT).show(); + } + }; + + private Callback> usersCallback = new Callback>() { + + @Override + public void success(List users, Response resp) { + progressBar.setVisibility(View.GONE); + + UserAdapter ua = new UserAdapter(IssueActivity.this, users); + assigneeSpinner.setAdapter(ua); + assigneeSpinner.setSelection(ua.getPosition(Repository.selectedIssue.getAssignee()), true); + } + + @Override + public void failure(RetrofitError e) { + RetrofitHelper.printDebugInfo(IssueActivity.this, e); + + progressBar.setVisibility(View.GONE); + Crouton.makeText(IssueActivity.this, R.string.connection_error, Style.ALERT).show(); + } + }; + + private Callback> milestonesCallback = new Callback>() { + + @Override + public void success(List milestones, Response resp) { + progressBar.setVisibility(View.GONE); + + MilestonesAdapter ma = new MilestonesAdapter(IssueActivity.this, milestones); + milestoneSpinner.setAdapter(ma); + milestoneSpinner.setSelection(ma.getPosition(Repository.selectedIssue.getMilestone()), true); + } + + @Override + public void failure(RetrofitError e) { + RetrofitHelper.printDebugInfo(IssueActivity.this, e); + + progressBar.setVisibility(View.GONE); + Crouton.makeText(IssueActivity.this, R.string.connection_error, Style.ALERT).show(); + } + }; } diff --git a/app/src/main/java/com/bd/gitlab/adapter/IssuesAdapter.java b/app/src/main/java/com/bd/gitlab/adapter/IssuesAdapter.java index 3c8f433..9374fa5 100644 --- a/app/src/main/java/com/bd/gitlab/adapter/IssuesAdapter.java +++ b/app/src/main/java/com/bd/gitlab/adapter/IssuesAdapter.java @@ -14,6 +14,7 @@ import com.bd.gitlab.R; import com.bd.gitlab.model.Issue; import com.bd.gitlab.tools.Repository; +import com.bd.gitlab.views.CircleTransform; import com.bd.gitlab.views.CompoundTextView; import com.squareup.picasso.Picasso; @@ -91,7 +92,7 @@ else if(issues.get(position).getAssignee().getAvatarUrl() != null) } summary.setText(assigneeName); - Picasso.with(convertView.getContext()).load(assigneeAvatarUrl).into(summary); + Picasso.with(convertView.getContext()).load(assigneeAvatarUrl).placeholder(R.drawable.default_avatar).transform(new CircleTransform()).into(summary); return convertView; } diff --git a/app/src/main/java/com/bd/gitlab/adapter/NoteAdapter.java b/app/src/main/java/com/bd/gitlab/adapter/NoteAdapter.java index dd74d57..e5c3682 100644 --- a/app/src/main/java/com/bd/gitlab/adapter/NoteAdapter.java +++ b/app/src/main/java/com/bd/gitlab/adapter/NoteAdapter.java @@ -19,6 +19,7 @@ import com.bd.gitlab.R; import com.bd.gitlab.model.Note; import com.bd.gitlab.tools.Repository; +import com.bd.gitlab.views.CircleTransform; import com.squareup.picasso.Picasso; public class NoteAdapter extends BaseAdapter { @@ -90,7 +91,7 @@ public View getView(int position, View convertView, ViewGroup parent) { else if(notes.get(position).getAuthor().getAvatarUrl() != null) url = notes.get(position).getAuthor().getAvatarUrl() + "&s=" + size; - Picasso.with(convertView.getContext()).load(url).into(icon); + Picasso.with(convertView.getContext()).load(url).placeholder(R.drawable.default_avatar).transform(new CircleTransform()).into(icon); return convertView; } diff --git a/app/src/main/java/com/bd/gitlab/adapter/UserAdapter.java b/app/src/main/java/com/bd/gitlab/adapter/UserAdapter.java index 9edcedf..2064a20 100644 --- a/app/src/main/java/com/bd/gitlab/adapter/UserAdapter.java +++ b/app/src/main/java/com/bd/gitlab/adapter/UserAdapter.java @@ -14,6 +14,7 @@ import com.bd.gitlab.R; import com.bd.gitlab.model.User; import com.bd.gitlab.tools.Repository; +import com.bd.gitlab.views.CircleTransform; import com.squareup.picasso.Picasso; import fr.tkeunebr.gravatar.Gravatar; @@ -96,7 +97,7 @@ public View getView(int position, View convertView, ViewGroup parent) { else if(users.get(position).getAvatarUrl() != null) url = users.get(position).getAvatarUrl() + "&s=" + size; - Picasso.with(convertView.getContext()).load(url).into(icon); + Picasso.with(convertView.getContext()).load(url).placeholder(R.drawable.default_avatar).transform(new CircleTransform()).into(icon); return convertView; } diff --git a/app/src/main/java/com/bd/gitlab/views/CircleTransform.java b/app/src/main/java/com/bd/gitlab/views/CircleTransform.java new file mode 100644 index 0000000..6a9c148 --- /dev/null +++ b/app/src/main/java/com/bd/gitlab/views/CircleTransform.java @@ -0,0 +1,61 @@ +/* + * Copyright 2014 Julian Shen + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.bd.gitlab.views; + +import android.graphics.Bitmap; +import android.graphics.BitmapShader; +import android.graphics.Canvas; +import android.graphics.Paint; + +import com.squareup.picasso.Transformation; + +/** + * Created by julian on 13/6/21. + */ +public class CircleTransform implements Transformation { + @Override + public Bitmap transform(Bitmap source) { + int size = Math.min(source.getWidth(), source.getHeight()); + + int x = (source.getWidth() - size) / 2; + int y = (source.getHeight() - size) / 2; + + Bitmap squaredBitmap = Bitmap.createBitmap(source, x, y, size, size); + if (squaredBitmap != source) { + source.recycle(); + } + + Bitmap bitmap = Bitmap.createBitmap(size, size, source.getConfig()); + + Canvas canvas = new Canvas(bitmap); + Paint paint = new Paint(); + BitmapShader shader = new BitmapShader(squaredBitmap, BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP); + paint.setShader(shader); + paint.setAntiAlias(true); + + float r = size/2f; + canvas.drawCircle(r, r, r, paint); + + squaredBitmap.recycle(); + return bitmap; + } + + @Override + public String key() { + return "circle"; + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable-xhdpi/default_avatar.png b/app/src/main/res/drawable-xhdpi/default_avatar.png new file mode 100644 index 0000000000000000000000000000000000000000..4b63c890eb0052106d2fb5ca782d48327be96167 GIT binary patch literal 5103 zcmZ`-2{hF2*B^{ETat)0BV@@e8iS$iyOF)@gBgrvOk>8Dosv|xk+qO)Er=pphGfew zglvhdA+pOmzuxz}=lA~4dB5j8-+R9Ie(v(z`+T40o+r-KM30N(EC&Dp;4;wHHm6g} zKZA{h{{EI8phPD?cMY@#0Ps5D#Gx}Y{Tt+}Z;l24f+Ycfh!_B1pU#R{001a30AL9N z0HD$VfHTDGS~FF;fW^f~Pn%BZ&z@FYIGwN)^=CyQFj@KyjJ?1l?+ySLn96r3#^UX5(^`dHZg?@`IaPLRzirgYdcbh3twAe8ym%`ccoztUtda^;ZYIwlV$ zY+O}LMBZU90LEqvFra!{i zAy-(5O@t+QGpA!ty*>FP%xE!m4k?9G;B(n>^NJn>qT}mG6 z6{!Xwu#^IAmo9YziTr^aUwF1Efo{(UKz`}4Q$*o)>1h{Qu~+<$W?)b5-9SMl^trh5 z#}Q%{m7=?1>lbOm!Ji$NgClboc;=3M>+ls;>_Ky^5q1%3dZPi|!vaIxahVsx*be#A z%Ts`MY*O-y*8$;NE6ny)Z<|H25owXWOujBDHWk?s^}nu2sT`-#SPsaRXE+(Bn8P?* zUP(5|Gv4zKWqm#pBKkIIAFa-@8!&B0V=gBU%3~tL=E4EHqU$QwsSRC3z%GgidO~*~^;ZjJbI`S&8;Bjy2Yw z+CI~sVtJm7ZqmmLxt0FR?B*p1*SwpBl12KG=5J*THKGU$N)9Hfj*5RG67IADxQj?~ zRyJ(_BCA5O>1hU?&PIVi{`lZ94=mNS5oJJ>(ne;zecG@^G}_wj@X?J`^HX?_HDWfG51pYVRq8`ak?Rn|yO)K|LKx02IXKxG4a5F9=h)KyhF z8(qvS?WT~R5B-WKj=;s)F`fYh=V)rKNxudc5o;nr)r3yy=Myl2%xRjJUf@A{9d>YZ z@yBV*2_m$!%?d6f2AVpUD5m`R{Z>YuO+)gr^K>(BQ&NAeba<6WjrYTpHj|Cvq*?4h zhUdMSv%B29QWd;&Lry>Ab(q7M-wu~~rbxul5a`yZ*{#RtF<4lOrIIEpwbUjyZ8fka*gMYbdy6+x3_8pcQ7Gig=gzM^vM>17f5aRU9XEz$`#9LpydvE2KifIrkTEqw|kr5tnQNu z5}rx7t}Gd2o6O3;u-%B|5H2~}uYW%f@&2W?${Y>ReJEceS)<0_?YM9|8ORUcHpAQ+ z8amOA^Gh%M7&f=VQ^lAQvv*zlginiV@uZVQjIDB(ko4RZ4<-G%#B)*fi%(a-^O*hU zuqe1{e>dWB@#C^rFmy_5D+|)wR_`DanGK0uH5&4k{PbNrz0y5ci0i>Px;d3*MUySK znysbYZ@L$nI|M0tMpb&uy>0I&p%}J>LX8AWlToXdEu7y;%25~cRd=>N9j?7#ZO4-Q z<@gV!EdF$ELhDg&4p*kw)}L|@`$SUts>eTe=jYobYX&1uY^jKOQzLo z$fqXm`B9->JsNAIzlt~<-BH`a9p=0CcA<9YLV0Y$AGY23_Hq9G2Cq_za@Uz zu;IpO@ptwnBHa0z9?=rF2@8SsqOx;@Jna=rX~to5mtspMX^E?iXTqbWI-g)wo>6y0 z91j_w0`jKsB9xdmPhv725Z{TssZwYx(~Y3^jZNMkpRJNtH8*v^+1!gzutw^FZZy`M zDjLWC0J=+ym_+wHSY9ETb=An4-2-^7go~ORT31(>6SUe6q5ycq;g>${-L?KI--iT3 zF|1?<_k$jv-NW~D=qPGn2mvxdd2OronSlb%g>m>hP=xM$a1Q!XqoetB5v3B~WOy)E zRZF4PPV}epLB`$-p-)kk9a7alB@D=&@qO;w@cX4PTT|6JJG`fZ)rjt+=)!qjf5+EM z6UAlW&wpy5G$SM*Ie90>NW_gv6~vj@3Cq|#%Bmov(8#RHx=dv*s17ah6`#IM!X0bQ zLBukAW4k*HcAmkCxg%}7@5UuUfR?PT*poM#>V*+WqdbNuVG)KNSYffGg^F<=<58#u z<3h$!IX^>maf|M@g1?NWOamtb`#q@x%NASY3H5NkpAY%n9bx@5-dclALo7p#uSELi zfVp-)++`zXVn+H%ow)tM94KyT5bv!8NxL8@;(&CM5;~|HhMgRNAvW^s%Ddb>e{DS}xT{?pR=$Il`^t)XI|*}FTMS>l zm!VBrQch2Z5VahZ8VAK-h#v1mQ>Nbh?I<{A3H@6Y5=aFs3>lzE%~O21%WYioPx z!=D}vNLqeTb;7%&6ln3}dC2c35&Gfxxw824!z%hDU*}sG7*Va;jLl`wrK1dvWr{PL1dL48P(8-UJ7rGPW8skG^*OxXZ z82G+4OO~BxTo>=k(ZRvn4uhr}m%t^2h4ezKIKsrkd%!#akIZr<$=s8c&<$mZ3TLRV z?mMx`XWH`R0+lFc!xhnQ?VincxdmS@)Ay?Sam58RNnz|-T{;<=s9si*H=ftyr}HkLFBl0?KPFvnbU`eWc`ac4MFK556tNCEJ0xj|0P0;U|4e zUlTextt|Al^7=mtaWaT-vufT|Zm7?FYK$~OB}?!<=#?spXx`yyoPb>Pd4=Asf1)hE z8#1|QELS;Kj)_7>vPPc5E#_yZ{mRc}Pwfi!9ld9LoM=8eYfsltl@z_k7vD;6H?%L9 z4U}-IK&E<1Wdm#nWE(^kS6`vu*%v^M8vdxo1}=Uaxv9i?$Z#H#a3Y)*+qT>^M|vuZ z$}9wHhrO4|c1>&R_9|X($Ri~qQ-`v4CIip)Hm)xL*A;1VU4G%YebE*j{BeQFftO6k zGP+n9L-`CbfjIhkL|=#4%Qgy4hOmN;-34*GDxbnUxG4q7uh}QK-al6F`7llfBO@|1 zdITM~ReH@K_OwjOQ)j_b1xHb!>X8 z71!xgAci96zJag$TC~_Inp9>s+hzDk-NCnb0Uf&K5XneP-VEAUvMXvTA$yWFuoII8N6^0zI*^$8O21A(JGQ zp)Y?G)v@On>OESO^r`gA!x6;`QwxK|z^c;)HDywoGEPL!RE3QQ-Y9*gPT?|<`Ihk_ z%d-{DRyiE#8fx;OgS)=v^kXvW+?(pRef^W>kABgM;wu_l_p9Ny>30v?s|BMQgY|!Y zfhAidPgIEN%nb;aU7zgRtSy~57vI_=8Z;{v9jc{J1Rg{@$ou1L67blD3W%kr>a)7L zp74vahqxl7(#`s;!J-~9&$zBnDe$jq%}pbd;;QhWvgLgz(}GWhE(RQ&Q^X@Z?ncV) z?nHFxha>A(MU|tMSe;b5b{D!1xy)rMr%9+A6BYMKEi0!^6`?-y-fNmDy| z?qHqA-l{p9=X5UQz)R8oc;@;&iUs>~(tXwKg$p6u^D6p914We?D>jzgi|XAE_@X?- zbpz#_=i`yz{Ojl|m@y10hkoz|q3~@dNanrixrC2FD>I=YYQs1iFr`PTy z;r8{oGXY+A<8M{nb`F_%Wt@ciA_NSWzpX()u6?krI$>)C)yeQMTK!t&nx%s^y0j_3jhncw zeRpV8ZlVOcbY=SN=PR?BaC!b`Wz{)V+X9((nf)@xV0@-z(Y42ON$1si`V|xGz~&4` znS~QI2h{d_0@Yq+y=BRET4IUhCHu4xq2RJwB_=16XeS&Ku zSDMyMc^ju<)uund1gZ{7u=ghYLRF8xpHSUvsodJ(vYp>NsafwMxPM*uj%F|VVeDKq z&#~(&&Q?r_e;!zWbARd$lp)K^Ce8dti+u*j%%)xWM&*A%@rZ z_61{;JIYgo*8)a_f^Y2?j_eCatFfxi5(TIDGlw6W6a;xsC0y#yn)^xX4PB!D!q>FK zl6Lu$ef6c~YAAclR5y$gXST^j$1-7F@o(${i<}wvQEqRPB!0c){pJYVVVX_2db6=$ zzvAQhgM#s&O^c+Z*ZM13qu$%&=A?51Q+g@PP@6pPaNQ$6&AVE(DMO3*F(7xVGUy#2 z?hPirhorTsD|bK5c_+7zCx$o})^wEaU((I#YtiD4oy|*X!Vo{qn~3hFt&N!{t!luX z{xmDDvxbNvD@w;!6UZkduS1z3Hye%XQ*raKge_%_$Ll~dP_u_akmQKw&GnCX`c zh(A2AUl}cZ;2VeZI}i!7&J8lwnT$iZl5lhakcYvMaxeusd88!_j)Eak2zgnU5();Z z)?JhOKMFp+SiD=%|F6(0e4R>HF!{%WpRXG^z?p;t82C85+6C88F+hB{K$Vq_~@ zB?@IqkIWAMFFLM+(lJ8+!u*{o3Z;+3yL*rUa0LXcd@QKrKMeg3=sF%t_V|k_NGa(1 z4?}3Y4~`r}!~y=M0ZJset5sN=&_QSZk}DKWFCOB*-v~H_9;Ui=r4Zc Date: Mon, 18 Jul 2016 20:29:58 +0800 Subject: [PATCH 4/5] =?UTF-8?q?add=EF=BC=9A=E4=B8=AA=E4=BA=BA=E9=A1=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/bd/gitlab/ProfileActivity.java | 59 ++++++- app/src/main/res/layout/activity_profile.xml | 156 +++++++++++++++++- app/src/main/res/values/strings.xml | 10 ++ app/src/main/res/values/style.xml | 19 +++ 4 files changed, 239 insertions(+), 5 deletions(-) create mode 100644 app/src/main/res/values/style.xml diff --git a/app/src/main/java/com/bd/gitlab/ProfileActivity.java b/app/src/main/java/com/bd/gitlab/ProfileActivity.java index 2ddfbd4..6a9cab5 100644 --- a/app/src/main/java/com/bd/gitlab/ProfileActivity.java +++ b/app/src/main/java/com/bd/gitlab/ProfileActivity.java @@ -2,11 +2,20 @@ import android.app.Activity; import android.os.Bundle; +import android.text.TextUtils; import android.util.Log; +import android.widget.EditText; +import android.widget.ImageView; import com.bd.gitlab.model.User; import com.bd.gitlab.tools.Repository; +import com.bd.gitlab.views.CircleTransform; +import com.squareup.picasso.Picasso; +import java.nio.Buffer; + +import butterknife.ButterKnife; +import butterknife.InjectView; import retrofit.Callback; import retrofit.RetrofitError; import retrofit.client.Response; @@ -15,18 +24,64 @@ * Created by lenovo on 2016/7/14. */ public class ProfileActivity extends Activity{ + @InjectView(R.id.avatar) + ImageView mAvatar; + @InjectView(R.id.nickname) + EditText mNickname; + @InjectView(R.id.email_text) + EditText mEmail; + @InjectView(R.id.public_email_text) + EditText mPublicEmail; + @InjectView(R.id.skype_text) + EditText mSkype; + @InjectView(R.id.linkidin_text) + EditText mLinkedin; + @InjectView(R.id.twitter_text) + EditText mTwitter; + @InjectView(R.id.website_text) + EditText mWebsite; + @InjectView(R.id.bio_text) + EditText mBio; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_profile); - + ButterKnife.inject(this); Repository.getService().getUser(userCallback); } private Callback userCallback = new Callback() { @Override public void success(User user, Response response) { - Log.v("=======","========"+user.getEmail()); + Picasso.with(ProfileActivity.this).load(user.getAvatarUrl()).placeholder(R.drawable.default_avatar).transform(new CircleTransform()).into(mAvatar); + if(!TextUtils.isEmpty(user.getName())){ + mNickname.setText(user.getName()); + } + + if(!TextUtils.isEmpty(user.getEmail())){ + mEmail.setText(user.getEmail()); + } + + if(!TextUtils.isEmpty(user.getSkype())){ + mSkype.setText(user.getSkype()); + } + + if(!TextUtils.isEmpty(user.getTwitter())){ + mTwitter.setText(user.getTwitter()); + } + + if(!TextUtils.isEmpty(user.getLinkedin())){ + mLinkedin.setText(user.getLinkedin()); + } + + if(!TextUtils.isEmpty(user.getWebsite_url())){ + mWebsite.setText(user.getWebsite_url()); + } + + if(!TextUtils.isEmpty(user.getBio())){ + mBio.setText(user.getBio()); + } } @Override diff --git a/app/src/main/res/layout/activity_profile.xml b/app/src/main/res/layout/activity_profile.xml index 6be9e57..5fedfed 100644 --- a/app/src/main/res/layout/activity_profile.xml +++ b/app/src/main/res/layout/activity_profile.xml @@ -1,5 +1,155 @@ - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 92de293..b7f18db 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -85,6 +85,16 @@ Add user to group Add user + + Email      + Public email + Skype     + Linkedin + Twitter    + Website   + Location + Bio           + Guest Reporter diff --git a/app/src/main/res/values/style.xml b/app/src/main/res/values/style.xml new file mode 100644 index 0000000..662b1f3 --- /dev/null +++ b/app/src/main/res/values/style.xml @@ -0,0 +1,19 @@ + + + + + + From 4d6c870674f35daa4ea52dd8a768bb29041d511f Mon Sep 17 00:00:00 2001 From: steveyg <372125992@qq.com> Date: Tue, 9 Aug 2016 20:05:54 +0800 Subject: [PATCH 5/5] Delete Content.java del --- app/src/main/java/com/bd/gitlab/util/Content.java | 9 --------- 1 file changed, 9 deletions(-) delete mode 100644 app/src/main/java/com/bd/gitlab/util/Content.java diff --git a/app/src/main/java/com/bd/gitlab/util/Content.java b/app/src/main/java/com/bd/gitlab/util/Content.java deleted file mode 100644 index db2ef8e..0000000 --- a/app/src/main/java/com/bd/gitlab/util/Content.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.bd.gitlab.util; - -/** - * Created by yangguang on 2016/7/7. - */ -public class Content { - public static final String HOST_URL = "http://gitlab.task.ac.cn/"; -// public static final String USER_TOKEN = "sNCkfm4D_7sNmmLooefb"; -}