mirror of
https://github.com/sismics/docs.git
synced 2024-11-22 14:07:55 +01:00
Android: event listeners on main thread, files UI polish
This commit is contained in:
parent
6fa0b8494e
commit
a0356845b1
@ -21,8 +21,6 @@ public class MainApplication extends Application {
|
|||||||
ApplicationContext.getInstance().setUserInfo(getApplicationContext(), json);
|
ApplicationContext.getInstance().setUserInfo(getApplicationContext(), json);
|
||||||
|
|
||||||
// TODO Fullscreen preview
|
// TODO Fullscreen preview
|
||||||
// TODO Event on file uploaded to refresh file list
|
|
||||||
// TODO Files deleting
|
|
||||||
|
|
||||||
super.onCreate();
|
super.onCreate();
|
||||||
}
|
}
|
||||||
|
@ -30,6 +30,7 @@ import com.sismics.docs.adapter.FilePagerAdapter;
|
|||||||
import com.sismics.docs.event.DocumentDeleteEvent;
|
import com.sismics.docs.event.DocumentDeleteEvent;
|
||||||
import com.sismics.docs.event.DocumentEditEvent;
|
import com.sismics.docs.event.DocumentEditEvent;
|
||||||
import com.sismics.docs.event.DocumentFullscreenEvent;
|
import com.sismics.docs.event.DocumentFullscreenEvent;
|
||||||
|
import com.sismics.docs.event.FileAddEvent;
|
||||||
import com.sismics.docs.event.FileDeleteEvent;
|
import com.sismics.docs.event.FileDeleteEvent;
|
||||||
import com.sismics.docs.fragment.DocShareFragment;
|
import com.sismics.docs.fragment.DocShareFragment;
|
||||||
import com.sismics.docs.listener.JsonHttpResponseHandler;
|
import com.sismics.docs.listener.JsonHttpResponseHandler;
|
||||||
@ -132,7 +133,6 @@ public class DocumentViewActivity extends ActionBarActivity {
|
|||||||
private void refreshDocument(JSONObject document) {
|
private void refreshDocument(JSONObject document) {
|
||||||
this.document = document;
|
this.document = document;
|
||||||
|
|
||||||
String id = document.optString("id");
|
|
||||||
String title = document.optString("title");
|
String title = document.optString("title");
|
||||||
String date = DateFormat.getDateFormat(this).format(new Date(document.optLong("create_date")));
|
String date = DateFormat.getDateFormat(this).format(new Date(document.optLong("create_date")));
|
||||||
String description = document.optString("description");
|
String description = document.optString("description");
|
||||||
@ -178,29 +178,7 @@ public class DocumentViewActivity extends ActionBarActivity {
|
|||||||
sharedImageView.setVisibility(shared ? View.VISIBLE : View.GONE);
|
sharedImageView.setVisibility(shared ? View.VISIBLE : View.GONE);
|
||||||
|
|
||||||
// Grab the attached files
|
// Grab the attached files
|
||||||
final View progressBar = findViewById(R.id.progressBar);
|
updateFiles();
|
||||||
final TextView filesEmptyView = (TextView) findViewById(R.id.filesEmptyView);
|
|
||||||
fileViewPager = (ViewPager) findViewById(R.id.fileViewPager);
|
|
||||||
fileViewPager.setOffscreenPageLimit(1);
|
|
||||||
|
|
||||||
FileResource.list(this, id, new JsonHttpResponseHandler() {
|
|
||||||
@Override
|
|
||||||
public void onSuccess(int statusCode, Header[] headers, JSONObject response) {
|
|
||||||
JSONArray files = response.optJSONArray("files");
|
|
||||||
filePagerAdapter = new FilePagerAdapter(DocumentViewActivity.this, files);
|
|
||||||
fileViewPager.setAdapter(filePagerAdapter);
|
|
||||||
|
|
||||||
progressBar.setVisibility(View.GONE);
|
|
||||||
if (files.length() == 0) filesEmptyView.setVisibility(View.VISIBLE);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onAllFailure(int statusCode, Header[] headers, byte[] responseBytes, Throwable throwable) {
|
|
||||||
filesEmptyView.setText(R.string.error_loading_files);
|
|
||||||
progressBar.setVisibility(View.GONE);
|
|
||||||
filesEmptyView.setVisibility(View.VISIBLE);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -425,7 +403,7 @@ public class DocumentViewActivity extends ActionBarActivity {
|
|||||||
*
|
*
|
||||||
* @param event Document fullscreen event
|
* @param event Document fullscreen event
|
||||||
*/
|
*/
|
||||||
public void onEvent(DocumentFullscreenEvent event) {
|
public void onEventMainThread(DocumentFullscreenEvent event) {
|
||||||
findViewById(R.id.detailLayout).setVisibility(event.isFullscreen() ? View.GONE : View.VISIBLE);
|
findViewById(R.id.detailLayout).setVisibility(event.isFullscreen() ? View.GONE : View.VISIBLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -434,7 +412,7 @@ public class DocumentViewActivity extends ActionBarActivity {
|
|||||||
*
|
*
|
||||||
* @param event Document edit event
|
* @param event Document edit event
|
||||||
*/
|
*/
|
||||||
public void onEvent(DocumentEditEvent event) {
|
public void onEventMainThread(DocumentEditEvent event) {
|
||||||
if (document == null) return;
|
if (document == null) return;
|
||||||
if (event.getDocument().optString("id").equals(document.optString("id"))) {
|
if (event.getDocument().optString("id").equals(document.optString("id"))) {
|
||||||
// The current document has been modified, refresh it
|
// The current document has been modified, refresh it
|
||||||
@ -447,7 +425,7 @@ public class DocumentViewActivity extends ActionBarActivity {
|
|||||||
*
|
*
|
||||||
* @param event Document delete event
|
* @param event Document delete event
|
||||||
*/
|
*/
|
||||||
public void onEvent(DocumentDeleteEvent event) {
|
public void onEventMainThread(DocumentDeleteEvent event) {
|
||||||
if (document == null) return;
|
if (document == null) return;
|
||||||
if (event.getDocumentId().equals(document.optString("id"))) {
|
if (event.getDocumentId().equals(document.optString("id"))) {
|
||||||
// The current document has been deleted, close this activity
|
// The current document has been deleted, close this activity
|
||||||
@ -460,9 +438,23 @@ public class DocumentViewActivity extends ActionBarActivity {
|
|||||||
*
|
*
|
||||||
* @param event File delete event
|
* @param event File delete event
|
||||||
*/
|
*/
|
||||||
public void onEvent(FileDeleteEvent event) {
|
public void onEventMainThread(FileDeleteEvent event) {
|
||||||
if (filePagerAdapter == null) return;
|
if (filePagerAdapter == null) return;
|
||||||
filePagerAdapter.remove(event.getFileId());
|
filePagerAdapter.remove(event.getFileId());
|
||||||
|
final TextView filesEmptyView = (TextView) findViewById(R.id.filesEmptyView);
|
||||||
|
if (filePagerAdapter.getCount() == 0) filesEmptyView.setVisibility(View.VISIBLE);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A file add event has been fired.
|
||||||
|
*
|
||||||
|
* @param event File add event
|
||||||
|
*/
|
||||||
|
public void onEventMainThread(FileAddEvent event) {
|
||||||
|
if (document == null) return;
|
||||||
|
if (document.optString("id").equals(event.getDocumentId())) {
|
||||||
|
updateFiles();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -499,6 +491,40 @@ public class DocumentViewActivity extends ActionBarActivity {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Refresh files list.
|
||||||
|
*/
|
||||||
|
private void updateFiles() {
|
||||||
|
if (document == null) return;
|
||||||
|
|
||||||
|
final View progressBar = findViewById(R.id.progressBar);
|
||||||
|
final TextView filesEmptyView = (TextView) findViewById(R.id.filesEmptyView);
|
||||||
|
fileViewPager = (ViewPager) findViewById(R.id.fileViewPager);
|
||||||
|
fileViewPager.setOffscreenPageLimit(1);
|
||||||
|
fileViewPager.setAdapter(null);
|
||||||
|
progressBar.setVisibility(View.VISIBLE);
|
||||||
|
filesEmptyView.setVisibility(View.GONE);
|
||||||
|
|
||||||
|
FileResource.list(this, document.optString("id"), new JsonHttpResponseHandler() {
|
||||||
|
@Override
|
||||||
|
public void onSuccess(int statusCode, Header[] headers, JSONObject response) {
|
||||||
|
JSONArray files = response.optJSONArray("files");
|
||||||
|
filePagerAdapter = new FilePagerAdapter(DocumentViewActivity.this, files);
|
||||||
|
fileViewPager.setAdapter(filePagerAdapter);
|
||||||
|
|
||||||
|
progressBar.setVisibility(View.GONE);
|
||||||
|
if (files.length() == 0) filesEmptyView.setVisibility(View.VISIBLE);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onAllFailure(int statusCode, Header[] headers, byte[] responseBytes, Throwable throwable) {
|
||||||
|
filesEmptyView.setText(R.string.error_loading_files);
|
||||||
|
progressBar.setVisibility(View.GONE);
|
||||||
|
filesEmptyView.setVisibility(View.VISIBLE);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onDestroy() {
|
protected void onDestroy() {
|
||||||
EventBus.getDefault().unregister(this);
|
EventBus.getDefault().unregister(this);
|
||||||
|
@ -15,6 +15,9 @@ import com.sismics.docs.util.PreferenceUtil;
|
|||||||
import org.json.JSONArray;
|
import org.json.JSONArray;
|
||||||
import org.json.JSONObject;
|
import org.json.JSONObject;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import it.sephiroth.android.library.imagezoom.ImageViewTouch;
|
import it.sephiroth.android.library.imagezoom.ImageViewTouch;
|
||||||
import it.sephiroth.android.library.imagezoom.ImageViewTouchBase;
|
import it.sephiroth.android.library.imagezoom.ImageViewTouchBase;
|
||||||
|
|
||||||
@ -25,7 +28,7 @@ public class FilePagerAdapter extends PagerAdapter {
|
|||||||
/**
|
/**
|
||||||
* Files list.
|
* Files list.
|
||||||
*/
|
*/
|
||||||
private JSONArray files;
|
private List<JSONObject> files;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* AQuery.
|
* AQuery.
|
||||||
@ -42,8 +45,11 @@ public class FilePagerAdapter extends PagerAdapter {
|
|||||||
*/
|
*/
|
||||||
private String authToken;
|
private String authToken;
|
||||||
|
|
||||||
public FilePagerAdapter(Context context, JSONArray files) {
|
public FilePagerAdapter(Context context, JSONArray filesArray) {
|
||||||
this.files = files;
|
this.files = new ArrayList<>();
|
||||||
|
for (int i = 0; i < filesArray.length(); i++) {
|
||||||
|
files.add(filesArray.optJSONObject(i));
|
||||||
|
}
|
||||||
this.context = context;
|
this.context = context;
|
||||||
this.authToken = PreferenceUtil.getAuthToken(context);
|
this.authToken = PreferenceUtil.getAuthToken(context);
|
||||||
aq = new AQuery(context);
|
aq = new AQuery(context);
|
||||||
@ -55,7 +61,7 @@ public class FilePagerAdapter extends PagerAdapter {
|
|||||||
|
|
||||||
ImageViewTouch fileImageView = (ImageViewTouch) view.findViewById(R.id.fileImageView);
|
ImageViewTouch fileImageView = (ImageViewTouch) view.findViewById(R.id.fileImageView);
|
||||||
ProgressBar progressBar = (ProgressBar) view.findViewById(R.id.fileProgressBar);
|
ProgressBar progressBar = (ProgressBar) view.findViewById(R.id.fileProgressBar);
|
||||||
JSONObject file = files.optJSONObject(position);
|
JSONObject file = files.get(position);
|
||||||
String fileUrl = PreferenceUtil.getServerUrl(context) + "/api/file/" + file.optString("id") + "/data?size=web";
|
String fileUrl = PreferenceUtil.getServerUrl(context) + "/api/file/" + file.optString("id") + "/data?size=web";
|
||||||
aq.id(fileImageView)
|
aq.id(fileImageView)
|
||||||
.image(new BitmapAjaxCallback()
|
.image(new BitmapAjaxCallback()
|
||||||
@ -82,7 +88,7 @@ public class FilePagerAdapter extends PagerAdapter {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
return files.length();
|
return files.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -101,7 +107,7 @@ public class FilePagerAdapter extends PagerAdapter {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return files.optJSONObject(position);
|
return files.get(position);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -112,13 +118,17 @@ public class FilePagerAdapter extends PagerAdapter {
|
|||||||
public void remove(String fileId) {
|
public void remove(String fileId) {
|
||||||
if (files == null || fileId == null) return;
|
if (files == null || fileId == null) return;
|
||||||
|
|
||||||
for (int i = 0; i < files.length(); i++) {
|
for (JSONObject file : files) {
|
||||||
JSONObject file = files.optJSONObject(i);
|
|
||||||
if (fileId.equals(file.optString("id"))) {
|
if (fileId.equals(file.optString("id"))) {
|
||||||
files.remove(i);
|
files.remove(file);
|
||||||
notifyDataSetChanged();
|
notifyDataSetChanged();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getItemPosition(Object object) {
|
||||||
|
return POSITION_NONE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,45 @@
|
|||||||
|
package com.sismics.docs.event;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* File add event.
|
||||||
|
*
|
||||||
|
* @author bgamard.
|
||||||
|
*/
|
||||||
|
public class FileAddEvent {
|
||||||
|
/**
|
||||||
|
* Document ID.
|
||||||
|
*/
|
||||||
|
private String documentId;
|
||||||
|
/**
|
||||||
|
* File ID.
|
||||||
|
*/
|
||||||
|
private String fileId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a file add event.
|
||||||
|
*
|
||||||
|
* @param fileId File ID
|
||||||
|
*/
|
||||||
|
public FileAddEvent(String documentId, String fileId) {
|
||||||
|
this.documentId = documentId;
|
||||||
|
this.fileId = fileId;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Getter of fileId.
|
||||||
|
*
|
||||||
|
* @return fileId
|
||||||
|
*/
|
||||||
|
public String getFileId() {
|
||||||
|
return fileId;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Getter of documentId.
|
||||||
|
*
|
||||||
|
* @return documentId
|
||||||
|
*/
|
||||||
|
public String getDocumentId() {
|
||||||
|
return documentId;
|
||||||
|
}
|
||||||
|
}
|
@ -150,7 +150,7 @@ public class DocListFragment extends Fragment {
|
|||||||
*
|
*
|
||||||
* @param event Search event
|
* @param event Search event
|
||||||
*/
|
*/
|
||||||
public void onEvent(SearchEvent event) {
|
public void onEventMainThread(SearchEvent event) {
|
||||||
query = event.getQuery();
|
query = event.getQuery();
|
||||||
loadDocuments(getView(), true);
|
loadDocuments(getView(), true);
|
||||||
}
|
}
|
||||||
@ -160,7 +160,7 @@ public class DocListFragment extends Fragment {
|
|||||||
*
|
*
|
||||||
* @param event Document edit event
|
* @param event Document edit event
|
||||||
*/
|
*/
|
||||||
public void onEvent(DocumentEditEvent event) {
|
public void onEventMainThread(DocumentEditEvent event) {
|
||||||
adapter.updateDocument(event.getDocument());
|
adapter.updateDocument(event.getDocument());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -169,7 +169,7 @@ public class DocListFragment extends Fragment {
|
|||||||
*
|
*
|
||||||
* @param event Document delete event
|
* @param event Document delete event
|
||||||
*/
|
*/
|
||||||
public void onEvent(DocumentDeleteEvent event) {
|
public void onEventMainThread(DocumentDeleteEvent event) {
|
||||||
adapter.deleteDocument(event.getDocumentId());
|
adapter.deleteDocument(event.getDocumentId());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -178,7 +178,7 @@ public class DocListFragment extends Fragment {
|
|||||||
*
|
*
|
||||||
* @param event Document add event
|
* @param event Document add event
|
||||||
*/
|
*/
|
||||||
public void onEvent(DocumentAddEvent event) {
|
public void onEventMainThread(DocumentAddEvent event) {
|
||||||
// Refresh the list, maybe the new document fit in it
|
// Refresh the list, maybe the new document fit in it
|
||||||
loadDocuments(getView(), true);
|
loadDocuments(getView(), true);
|
||||||
|
|
||||||
|
@ -139,7 +139,7 @@ public class DocShareFragment extends DialogFragment {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onEvent(ShareDeleteEvent event) {
|
public void onEventMainThread(ShareDeleteEvent event) {
|
||||||
ShareResource.delete(getActivity(), event.getId(), new JsonHttpResponseHandler() {
|
ShareResource.delete(getActivity(), event.getId(), new JsonHttpResponseHandler() {
|
||||||
@Override
|
@Override
|
||||||
public void onSuccess(int statusCode, Header[] headers, JSONObject response) {
|
public void onSuccess(int statusCode, Header[] headers, JSONObject response) {
|
||||||
@ -153,7 +153,7 @@ public class DocShareFragment extends DialogFragment {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onEvent(ShareSendEvent event) {
|
public void onEventMainThread(ShareSendEvent event) {
|
||||||
if (document == null) return;
|
if (document == null) return;
|
||||||
|
|
||||||
// Build the share link
|
// Build the share link
|
||||||
|
@ -11,6 +11,7 @@ import android.support.v4.app.NotificationCompat.Builder;
|
|||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
import com.sismics.docs.R;
|
import com.sismics.docs.R;
|
||||||
|
import com.sismics.docs.event.FileAddEvent;
|
||||||
import com.sismics.docs.listener.JsonHttpResponseHandler;
|
import com.sismics.docs.listener.JsonHttpResponseHandler;
|
||||||
import com.sismics.docs.resource.FileResource;
|
import com.sismics.docs.resource.FileResource;
|
||||||
|
|
||||||
@ -20,6 +21,8 @@ import org.json.JSONObject;
|
|||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
|
|
||||||
|
import de.greenrobot.event.EventBus;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Service to upload a file to a document in the background.
|
* Service to upload a file to a document in the background.
|
||||||
*
|
*
|
||||||
@ -81,6 +84,7 @@ public class FileUploadService extends IntentService {
|
|||||||
FileResource.addSync(this, documentId, is, new JsonHttpResponseHandler() {
|
FileResource.addSync(this, documentId, is, new JsonHttpResponseHandler() {
|
||||||
@Override
|
@Override
|
||||||
public void onSuccess(int statusCode, Header[] headers, JSONObject response) {
|
public void onSuccess(int statusCode, Header[] headers, JSONObject response) {
|
||||||
|
EventBus.getDefault().post(new FileAddEvent(documentId, response.optString("id")));
|
||||||
FileUploadService.this.onComplete();
|
FileUploadService.this.onComplete();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user