Skip to content

Commit

Permalink
Add support for SEND intent action
Browse files Browse the repository at this point in the history
  • Loading branch information
daohoangson committed Feb 22, 2017
1 parent c863e0f commit fdea459
Show file tree
Hide file tree
Showing 15 changed files with 529 additions and 221 deletions.
11 changes: 11 additions & 0 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,17 @@
android:label="@string/app_name"
android:launchMode="singleTop" />

<activity
android:name=".discussion.ActionSendReceiver"
android:label="@string/app_name"
android:theme="@style/Theme.AppCompat.Light.Dialog.Alert">
<intent-filter>
<action android:name="android.intent.action.SEND" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="image/*" />
</intent-filter>
</activity>

<activity
android:name=".discussion.ConversationActivity"
android:label="@string/app_name"
Expand Down
103 changes: 93 additions & 10 deletions app/src/main/java/com/xfrocks/api/androiddemo/Api.java
Original file line number Diff line number Diff line change
Expand Up @@ -171,13 +171,6 @@ public static User makeUser(JSONObject obj) {
return null;
}

public static PlaceholderDiscussion makePlaceholderDiscussion(int discussionId) {
PlaceholderDiscussion d = new PlaceholderDiscussion();
d.id = discussionId;

return d;
}

public static ConversationMessage makeConversationMessage(JSONObject obj) {
try {
ConversationMessage m = new ConversationMessage();
Expand Down Expand Up @@ -251,6 +244,13 @@ public static Conversation makeConversation(JSONObject obj) {
return null;
}

public static Conversation makeConversation(int conversationId) {
Conversation c = new Conversation();
c.id = conversationId;

return c;
}

public static Post makePost(JSONObject obj) {
try {
Post p = new Post();
Expand Down Expand Up @@ -324,6 +324,13 @@ public static Thread makeThread(JSONObject obj) {
return null;
}

public static Thread makeThread(int threadId) {
Thread t = new Thread();
t.id = threadId;

return t;
}

public static Attachment makeAttachment(JSONObject obj) {
try {
Attachment a = new Attachment();
Expand Down Expand Up @@ -426,6 +433,10 @@ public static String makeAttachmentsUrl(String path, String attachmentHash, Acce
}

private static String makeUrl(int method, String url, Map<String, String> params) {
if (url == null) {
url = "";
}

if (!url.contains("://")) {
url = String.format("%s/index.php?%s", BuildConfig.API_ROOT, url.replace('?', '&'));
}
Expand Down Expand Up @@ -935,6 +946,15 @@ public boolean canUploadAttachment() {
return permissionUploadAttachment;
}

abstract public String getGetMessagesUrl();

abstract public Params getGetMessagesParams(int page, AccessToken accessToken);

abstract public String getPostAttachmentsUrl(String attachmentHash, AccessToken accessToken);

abstract public String getPostMessagesUrl();

abstract public Params getPostMessagesParams(String bodyPlainText, String attachmentHash, AccessToken accessToken);
}

public static class DiscussionMessage implements Serializable {
Expand Down Expand Up @@ -980,17 +1000,80 @@ public Iterator<Attachment> getAttachmentsIterator() {
}
}

public static class PlaceholderDiscussion extends Discussion {
public static class Conversation extends Discussion {
@Override
public String getGetMessagesUrl() {
return URL_CONVERSATION_MESSAGES;
}

}
@Override
public Params getGetMessagesParams(int page, AccessToken accessToken) {
return new Params(accessToken)
.and(URL_CONVERSATION_MESSAGES_PARAM_CONVERSATION_ID, getId())
.and(PARAM_PAGE, page)
.and(PARAM_ORDER, Api.URL_CONVERSATION_MESSAGES_ORDER_REVERSE)
.andIf(page > 1, "fields_exclude", "conversation");
}

public static class Conversation extends Discussion {
@Override
public String getPostAttachmentsUrl(String attachmentHash, AccessToken accessToken) {
return makeAttachmentsUrl(URL_CONVERSATIONS_ATTACHMENTS, attachmentHash, accessToken);
}

@Override
public String getPostMessagesUrl() {
return URL_CONVERSATION_MESSAGES;
}

@Override
public Params getPostMessagesParams(String bodyPlainText, String attachmentHash, AccessToken accessToken) {
return new Params(accessToken)
.and(URL_CONVERSATION_MESSAGES_PARAM_CONVERSATION_ID, getId())
.and(URL_CONVERSATION_MESSAGES_PARAM_MESSAGE_BODY, bodyPlainText)
.and(URL_CONVERSATION_MESSAGES_PARAM_ATTACHMENT_HASH, attachmentHash)
.and("fields_include", "message_id");
}
}

public static class ConversationMessage extends DiscussionMessage {
}

public static class Thread extends Discussion {
@Override
public String getGetMessagesUrl() {
return URL_POSTS;
}

@Override
public Params getGetMessagesParams(int page, AccessToken accessToken) {
return new Api.Params(accessToken)
.and(Api.URL_POSTS_PARAM_THREAD_ID, getId())
.and(Api.PARAM_PAGE, page)
.and(Api.PARAM_ORDER, Api.URL_POSTS_ORDER_REVERSE)
.andIf(page > 1, "fields_exclude", "thread");
}

@Override
public String getPostAttachmentsUrl(String attachmentHash, AccessToken accessToken) {
String url = makeAttachmentsUrl(URL_POSTS_ATTACHMENTS, attachmentHash, accessToken);
url += String.format(Locale.US, "&thread_id=%d", getId());

return url;
}

@Override
public String getPostMessagesUrl() {
return URL_POSTS;
}

@Override
public Params getPostMessagesParams(String bodyPlainText, String attachmentHash, AccessToken accessToken) {
return new Params(accessToken)
.and(URL_POSTS_PARAM_THREAD_ID, getId())
.and(URL_POSTS_PARAM_POST_BODY, bodyPlainText)
.and(URL_POSTS_PARAM_ATTACHMENT_HASH, attachmentHash)
.and("fields_include", "post_id");
}
}

public static class Post extends DiscussionMessage {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import android.os.Parcelable;
import android.support.v4.app.Fragment;
import android.support.v4.app.ListFragment;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
Expand Down Expand Up @@ -75,7 +76,9 @@ public void onResume() {
String url = args.getString(ARG_URL);
Api.AccessToken at = (Api.AccessToken) args.getSerializable(ARG_ACCESS_TOKEN);

new DataRequest(url, at).start();
if (!TextUtils.isEmpty(url)) {
new DataRequest(url, at).start();
}
}
}
}
Expand Down
41 changes: 24 additions & 17 deletions app/src/main/java/com/xfrocks/api/androiddemo/LoginActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -44,9 +44,12 @@
import com.twitter.sdk.android.core.TwitterException;
import com.twitter.sdk.android.core.TwitterSession;
import com.twitter.sdk.android.core.identity.TwitterAuthClient;
import com.xfrocks.api.androiddemo.discussion.ActionSendReceiver;
import com.xfrocks.api.androiddemo.discussion.ConversationActivity;
import com.xfrocks.api.androiddemo.discussion.DiscussionActivity;
import com.xfrocks.api.androiddemo.discussion.ThreadActivity;
import com.xfrocks.api.androiddemo.gcm.RegistrationService;
import com.xfrocks.api.androiddemo.persist.AccessTokenHelper;
import com.xfrocks.api.androiddemo.persist.ObjectAsFile;

import org.json.JSONArray;
import org.json.JSONException;
Expand Down Expand Up @@ -255,7 +258,7 @@ public void onClick(View view) {
}
});

if (AccessTokenHelper.load(this) == null) {
if (ObjectAsFile.load(this, ObjectAsFile.ACCESS_TOKEN) == null) {
// only register if no existing token found
Intent gcmIntent = new Intent(LoginActivity.this, RegistrationService.class);
startService(gcmIntent);
Expand Down Expand Up @@ -299,7 +302,7 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
protected void onResume() {
super.onResume();

final Api.AccessToken at = AccessTokenHelper.load(this);
final Api.AccessToken at = (Api.AccessToken) ObjectAsFile.load(this, ObjectAsFile.ACCESS_TOKEN);
if (at != null) {
mRememberView.setChecked(true);

Expand All @@ -316,7 +319,7 @@ public void onClick(DialogInterface dialogInterface, int i) {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
mRememberView.setChecked(false);
AccessTokenHelper.save(LoginActivity.this, null);
ObjectAsFile.save(LoginActivity.this, ObjectAsFile.ACCESS_TOKEN, null);
}
})
.show();
Expand Down Expand Up @@ -534,27 +537,31 @@ private boolean attemptLogin(Api.AccessToken at) {
private void startNextActivityAndFinish(Api.AccessToken at) {
Intent nextIntent = null;
Intent loginIntent = getIntent();
String redirectTo = "";
String redirectTo = null;
if (loginIntent != null && loginIntent.hasExtra(EXTRA_REDIRECT_TO)) {
redirectTo = loginIntent.getStringExtra(EXTRA_REDIRECT_TO);
}

Class[] discussionActivities = new Class[]{
ConversationActivity.class,
};
for (Class discussionActivity : discussionActivities) {
String discussionActivityRedirectToPrefix = discussionActivity.getSimpleName() + "://";
if (redirectTo.startsWith(discussionActivityRedirectToPrefix)) {
nextIntent = new Intent(LoginActivity.this, ConversationActivity.class);
nextIntent.putExtra(ConversationActivity.EXTRA_ACCESS_TOKEN, at);
nextIntent.putExtra(ConversationActivity.EXTRA_LOGIN_REDIRECTED_TO, redirectTo);
if (!TextUtils.isEmpty(redirectTo)) {
Class[] discussionActivities = new Class[]{
ActionSendReceiver.class,
ConversationActivity.class,
ThreadActivity.class,
};
for (Class discussionActivity : discussionActivities) {
String discussionActivityRedirectToPrefix = discussionActivity.getSimpleName();
if (redirectTo.startsWith(discussionActivityRedirectToPrefix)) {
nextIntent = new Intent(LoginActivity.this, discussionActivity);
nextIntent.putExtra(DiscussionActivity.EXTRA_ACCESS_TOKEN, at);
nextIntent.putExtra(DiscussionActivity.EXTRA_LOGIN_REDIRECTED_TO, redirectTo);
}
}
}

if (nextIntent == null) {
nextIntent = new Intent(LoginActivity.this, MainActivity.class);
nextIntent.putExtra(MainActivity.EXTRA_ACCESS_TOKEN, at);
if (!redirectTo.isEmpty()) {
if (TextUtils.isEmpty(redirectTo)) {
nextIntent.putExtra(MainActivity.EXTRA_URL, redirectTo);
}
}
Expand Down Expand Up @@ -646,7 +653,7 @@ private abstract class TokenRequest extends Api.PostRequest {
protected void onStart() {
mTokenRequest = this;
setViewsEnabled(false);
AccessTokenHelper.save(LoginActivity.this, null);
ObjectAsFile.save(LoginActivity.this, ObjectAsFile.ACCESS_TOKEN, null);
}

@Override
Expand Down Expand Up @@ -687,7 +694,7 @@ protected void onSuccess(JSONObject response) {
}

if (mRememberView.isChecked()) {
AccessTokenHelper.save(LoginActivity.this, at);
ObjectAsFile.save(LoginActivity.this, ObjectAsFile.ACCESS_TOKEN, at);
}

startNextActivityAndFinish(at);
Expand Down
Loading

0 comments on commit fdea459

Please sign in to comment.