mirror of
https://github.com/sismics/docs.git
synced 2024-11-25 23:27:57 +01:00
Closes #73: Android: User profile
This commit is contained in:
parent
1bbb21c7c6
commit
d58b0e8f74
@ -51,6 +51,9 @@
|
|||||||
android:name=".activity.AuditLogActivity"
|
android:name=".activity.AuditLogActivity"
|
||||||
android:label="@string/latest_activity">
|
android:label="@string/latest_activity">
|
||||||
</activity>
|
</activity>
|
||||||
|
<activity
|
||||||
|
android:name=".activity.UserProfileActivity">
|
||||||
|
</activity>
|
||||||
<activity
|
<activity
|
||||||
android:name=".activity.SettingsActivity"
|
android:name=".activity.SettingsActivity"
|
||||||
android:label="@string/settings">
|
android:label="@string/settings">
|
||||||
|
@ -6,6 +6,7 @@ import android.support.v4.widget.SwipeRefreshLayout;
|
|||||||
import android.support.v7.app.AppCompatActivity;
|
import android.support.v7.app.AppCompatActivity;
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
import android.widget.AdapterView;
|
||||||
import android.widget.ListView;
|
import android.widget.ListView;
|
||||||
import android.widget.ProgressBar;
|
import android.widget.ProgressBar;
|
||||||
|
|
||||||
@ -23,7 +24,6 @@ import org.json.JSONObject;
|
|||||||
* @author bgamard.
|
* @author bgamard.
|
||||||
*/
|
*/
|
||||||
public class AuditLogActivity extends AppCompatActivity {
|
public class AuditLogActivity extends AppCompatActivity {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
@ -64,6 +64,22 @@ public class AuditLogActivity extends AppCompatActivity {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Navigate to user profile on click
|
||||||
|
final ListView auditLogListView = (ListView) findViewById(R.id.auditLogListView);
|
||||||
|
auditLogListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
|
||||||
|
if (auditLogListView.getAdapter() == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
AuditLogListAdapter adapter = (AuditLogListAdapter) auditLogListView.getAdapter();
|
||||||
|
String username = adapter.getItem(position).optString("username");
|
||||||
|
Intent intent = new Intent(AuditLogActivity.this, UserProfileActivity.class);
|
||||||
|
intent.putExtra("username", username);
|
||||||
|
startActivity(intent);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
// Get audit log list
|
// Get audit log list
|
||||||
refreshView(documentId);
|
refreshView(documentId);
|
||||||
}
|
}
|
||||||
|
@ -59,7 +59,6 @@ import org.greenrobot.eventbus.ThreadMode;
|
|||||||
import org.json.JSONArray;
|
import org.json.JSONArray;
|
||||||
import org.json.JSONException;
|
import org.json.JSONException;
|
||||||
import org.json.JSONObject;
|
import org.json.JSONObject;
|
||||||
import org.w3c.dom.Text;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
@ -642,6 +641,7 @@ public class DocumentViewActivity extends AppCompatActivity {
|
|||||||
menu.findItem(R.id.delete_file).setVisible(writable);
|
menu.findItem(R.id.delete_file).setVisible(writable);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Action only available if the document is writable
|
||||||
findViewById(R.id.actionEditDocument).setVisibility(writable ? View.VISIBLE : View.INVISIBLE);
|
findViewById(R.id.actionEditDocument).setVisibility(writable ? View.VISIBLE : View.INVISIBLE);
|
||||||
findViewById(R.id.actionUploadFile).setVisibility(writable ? View.VISIBLE : View.INVISIBLE);
|
findViewById(R.id.actionUploadFile).setVisibility(writable ? View.VISIBLE : View.INVISIBLE);
|
||||||
findViewById(R.id.actionSharing).setVisibility(writable ? View.VISIBLE : View.INVISIBLE);
|
findViewById(R.id.actionSharing).setVisibility(writable ? View.VISIBLE : View.INVISIBLE);
|
||||||
@ -649,11 +649,32 @@ public class DocumentViewActivity extends AppCompatActivity {
|
|||||||
|
|
||||||
// ACLs
|
// ACLs
|
||||||
ListView aclListView = (ListView) findViewById(R.id.aclListView);
|
ListView aclListView = (ListView) findViewById(R.id.aclListView);
|
||||||
aclListView.setAdapter(new AclListAdapter(document.optJSONArray("acls")));
|
final AclListAdapter aclListAdapter = new AclListAdapter(document.optJSONArray("acls"));
|
||||||
|
aclListView.setAdapter(aclListAdapter);
|
||||||
|
aclListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
|
||||||
|
AclListAdapter.AclItem acl = aclListAdapter.getItem(position);
|
||||||
|
if (acl.getType().equals("USER")) {
|
||||||
|
Intent intent = new Intent(DocumentViewActivity.this, UserProfileActivity.class);
|
||||||
|
intent.putExtra("username", acl.getName());
|
||||||
|
startActivity(intent);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
// Remaining metadata
|
// Remaining metadata
|
||||||
TextView creatorTextView = (TextView) findViewById(R.id.creatorTextView);
|
TextView creatorTextView = (TextView) findViewById(R.id.creatorTextView);
|
||||||
creatorTextView.setText(document.optString("creator"));
|
final String creator = document.optString("creator");
|
||||||
|
creatorTextView.setText(creator);
|
||||||
|
creatorTextView.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
Intent intent = new Intent(DocumentViewActivity.this, UserProfileActivity.class);
|
||||||
|
intent.putExtra("username", creator);
|
||||||
|
startActivity(intent);
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,93 @@
|
|||||||
|
package com.sismics.docs.activity;
|
||||||
|
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.preference.PreferenceGroup;
|
||||||
|
import android.support.v7.app.AppCompatActivity;
|
||||||
|
import android.view.MenuItem;
|
||||||
|
import android.view.View;
|
||||||
|
import android.widget.ProgressBar;
|
||||||
|
import android.widget.TextView;
|
||||||
|
|
||||||
|
import com.sismics.docs.R;
|
||||||
|
import com.sismics.docs.listener.HttpCallback;
|
||||||
|
import com.sismics.docs.model.application.ApplicationContext;
|
||||||
|
import com.sismics.docs.resource.UserResource;
|
||||||
|
|
||||||
|
import org.json.JSONObject;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* User profile activity.
|
||||||
|
*
|
||||||
|
* @author bgamard.
|
||||||
|
*/
|
||||||
|
public class UserProfileActivity extends AppCompatActivity {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
|
||||||
|
// Check if logged in
|
||||||
|
if (!ApplicationContext.getInstance().isLoggedIn()) {
|
||||||
|
startActivity(new Intent(this, LoginActivity.class));
|
||||||
|
finish();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Handle activity context
|
||||||
|
if (getIntent() == null) {
|
||||||
|
finish();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Input username
|
||||||
|
final String username = getIntent().getStringExtra("username");
|
||||||
|
if (username == null) {
|
||||||
|
finish();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Setup the activity
|
||||||
|
setTitle(username);
|
||||||
|
setContentView(R.layout.userprofile_activity);
|
||||||
|
if (getSupportActionBar() != null) {
|
||||||
|
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||||
|
getSupportActionBar().setHomeButtonEnabled(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get the user and populate the view
|
||||||
|
final ProgressBar progressBar = (ProgressBar) findViewById(R.id.progressBar);
|
||||||
|
final View layoutView = findViewById(R.id.layout);
|
||||||
|
progressBar.setVisibility(View.VISIBLE);
|
||||||
|
layoutView.setVisibility(View.GONE);
|
||||||
|
UserResource.get(this, username, new HttpCallback() {
|
||||||
|
@Override
|
||||||
|
public void onSuccess(JSONObject json) {
|
||||||
|
TextView emailTextView = (TextView) findViewById(R.id.emailTextView);
|
||||||
|
emailTextView.setText(json.optString("email"));
|
||||||
|
|
||||||
|
TextView quotaTextView = (TextView) findViewById(R.id.quotaTextView);
|
||||||
|
quotaTextView.setText(getString(R.string.storage_display,
|
||||||
|
Math.round(json.optLong("storage_current") / 1000000),
|
||||||
|
Math.round(json.optLong("storage_quota") / 1000000)));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onFinish() {
|
||||||
|
progressBar.setVisibility(View.GONE);
|
||||||
|
layoutView.setVisibility(View.VISIBLE);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onOptionsItemSelected(MenuItem item) {
|
||||||
|
switch (item.getItemId()) {
|
||||||
|
case android.R.id.home:
|
||||||
|
finish();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return super.onOptionsItemSelected(item);
|
||||||
|
}
|
||||||
|
}
|
@ -98,11 +98,19 @@ public class AclListAdapter extends BaseAdapter {
|
|||||||
* An ACL item in the list.
|
* An ACL item in the list.
|
||||||
* Permissions are grouped together.
|
* Permissions are grouped together.
|
||||||
*/
|
*/
|
||||||
private static class AclItem {
|
public static class AclItem {
|
||||||
private String type;
|
private String type;
|
||||||
private String name;
|
private String name;
|
||||||
private List<String> permList = new ArrayList<>();
|
private List<String> permList = new ArrayList<>();
|
||||||
|
|
||||||
|
public String getType() {
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int hashCode() {
|
public int hashCode() {
|
||||||
return (type + name).hashCode();
|
return (type + name).hashCode();
|
||||||
|
@ -54,6 +54,23 @@ public class UserResource extends BaseResource {
|
|||||||
.enqueue(HttpCallback.buildOkHttpCallback(callback));
|
.enqueue(HttpCallback.buildOkHttpCallback(callback));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* GET /user/username.
|
||||||
|
*
|
||||||
|
* @param context Context
|
||||||
|
* param username Username
|
||||||
|
* @param callback Callback
|
||||||
|
*/
|
||||||
|
public static void get(Context context, String username, HttpCallback callback) {
|
||||||
|
Request request = new Request.Builder()
|
||||||
|
.url(HttpUrl.parse(getApiUrl(context) + "/user/" + username))
|
||||||
|
.get()
|
||||||
|
.build();
|
||||||
|
OkHttpUtil.buildClient(context)
|
||||||
|
.newCall(request)
|
||||||
|
.enqueue(HttpCallback.buildOkHttpCallback(callback));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* POST /user/logout.
|
* POST /user/logout.
|
||||||
*
|
*
|
||||||
|
@ -12,6 +12,8 @@
|
|||||||
android:id="@+id/auditLogListView"
|
android:id="@+id/auditLogListView"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
|
android:choiceMode="singleChoice"
|
||||||
|
android:dividerHeight="0dp"
|
||||||
android:visibility="gone">
|
android:visibility="gone">
|
||||||
</ListView>
|
</ListView>
|
||||||
</android.support.v4.widget.SwipeRefreshLayout>
|
</android.support.v4.widget.SwipeRefreshLayout>
|
||||||
|
@ -4,8 +4,6 @@
|
|||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:padding="12dp"
|
android:padding="12dp"
|
||||||
android:clickable="true"
|
|
||||||
android:focusable="true"
|
|
||||||
android:background="?android:attr/selectableItemBackground">
|
android:background="?android:attr/selectableItemBackground">
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
|
@ -0,0 +1,77 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:padding="16dp">
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/layout"
|
||||||
|
android:visibility="gone"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="horizontal">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="120dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:textStyle="bold"
|
||||||
|
android:gravity="end"
|
||||||
|
android:textSize="16sp"
|
||||||
|
android:text="@string/email"/>
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/emailTextView"
|
||||||
|
android:layout_marginLeft="12dp"
|
||||||
|
android:layout_marginStart="12dp"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:ellipsize="end"
|
||||||
|
android:maxLines="1"
|
||||||
|
android:textSize="16sp"
|
||||||
|
android:text="user1@sismicsdocs.com"/>
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="horizontal">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="120dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:textStyle="bold"
|
||||||
|
android:gravity="end"
|
||||||
|
android:textSize="16sp"
|
||||||
|
android:text="@string/storage_quota"/>
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/quotaTextView"
|
||||||
|
android:layout_marginLeft="12dp"
|
||||||
|
android:layout_marginStart="12dp"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:ellipsize="end"
|
||||||
|
android:maxLines="1"
|
||||||
|
android:textSize="16sp"
|
||||||
|
android:text="35/500 MB"/>
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<ProgressBar
|
||||||
|
android:id="@+id/progressBar"
|
||||||
|
style="?android:attr/progressBarStyleLarge"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:visibility="visible"
|
||||||
|
android:layout_centerInParent="true"
|
||||||
|
android:indeterminate="true" />
|
||||||
|
|
||||||
|
</RelativeLayout>
|
@ -128,5 +128,8 @@
|
|||||||
<string name="download_pdf_title">Sismics Docs PDF export</string>
|
<string name="download_pdf_title">Sismics Docs PDF export</string>
|
||||||
<string name="latest_activity">Latest activity</string>
|
<string name="latest_activity">Latest activity</string>
|
||||||
<string name="activity">Activity</string>
|
<string name="activity">Activity</string>
|
||||||
|
<string name="email">E-mail</string>
|
||||||
|
<string name="storage_quota">Storage quota</string>
|
||||||
|
<string name="storage_display">%1$d/%2$d MB</string>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
Loading…
Reference in New Issue
Block a user