Sharing is now fully implemented
This commit is contained in:
@@ -23,4 +23,6 @@ public interface AppPrefsConstants {
|
|||||||
String USER_PASSWORD = "user_password";
|
String USER_PASSWORD = "user_password";
|
||||||
String USER_NAME = "user_name";
|
String USER_NAME = "user_name";
|
||||||
String VERIFY_CHAT_CODE_ERROR_MESSAGE = "verify_chat_code_error_message";
|
String VERIFY_CHAT_CODE_ERROR_MESSAGE = "verify_chat_code_error_message";
|
||||||
|
String IS_COMING_FROM_SHARING_ACTIVITY = "is_coming_from_sharing_activity";
|
||||||
|
String PATH_TO_FILE_TO_SHARE = "path_to_file_to_share";
|
||||||
}
|
}
|
||||||
@@ -76,10 +76,6 @@ public class HandleMessagesService extends FirebaseMessagingService {
|
|||||||
public void onMessageReceived(RemoteMessage remoteMessage) {
|
public void onMessageReceived(RemoteMessage remoteMessage) {
|
||||||
InjectionHelper.getMessagingComponent(this).inject(HandleMessagesService.this);
|
InjectionHelper.getMessagingComponent(this).inject(HandleMessagesService.this);
|
||||||
|
|
||||||
// if (mLoggedOutUtils.checkLoggedOutPrefs()) {
|
|
||||||
// return;
|
|
||||||
// }
|
|
||||||
|
|
||||||
customizeNotification(remoteMessage.getData());
|
customizeNotification(remoteMessage.getData());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -244,6 +240,7 @@ public class HandleMessagesService extends FirebaseMessagingService {
|
|||||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {
|
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
Intent replyIntent = ReplyNotificationReceiver.createReplyIntent(context, bundle, noOfUsers, groupId);
|
Intent replyIntent = ReplyNotificationReceiver.createReplyIntent(context, bundle, noOfUsers, groupId);
|
||||||
|
|
||||||
PendingIntent replyPendingIntent = PendingIntent.getBroadcast(getApplicationContext(),
|
PendingIntent replyPendingIntent = PendingIntent.getBroadcast(getApplicationContext(),
|
||||||
@@ -283,9 +280,11 @@ public class HandleMessagesService extends FirebaseMessagingService {
|
|||||||
|
|
||||||
public static CharSequence getReplyMessage(Intent intent) {
|
public static CharSequence getReplyMessage(Intent intent) {
|
||||||
Bundle remoteInput = RemoteInput.getResultsFromIntent(intent);
|
Bundle remoteInput = RemoteInput.getResultsFromIntent(intent);
|
||||||
|
|
||||||
if (remoteInput != null) {
|
if (remoteInput != null) {
|
||||||
return remoteInput.getCharSequence(Constants.KEY_TEXT_REPLY);
|
return remoteInput.getCharSequence(Constants.KEY_TEXT_REPLY);
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -55,6 +55,20 @@ public class AppPrefsModule {
|
|||||||
return new BooleanPreference(sharedPreferences, AppPrefsConstants.SAVE_PASSWORD);
|
return new BooleanPreference(sharedPreferences, AppPrefsConstants.SAVE_PASSWORD);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Provides
|
||||||
|
@ApplicationScope
|
||||||
|
@Named(AppPrefsConstants.IS_COMING_FROM_SHARING_ACTIVITY)
|
||||||
|
BooleanPreference provideIsComingFromSharingActivity(@AppPrefs SecurePreferences sharedPreferences) {
|
||||||
|
return new BooleanPreference(sharedPreferences, AppPrefsConstants.IS_COMING_FROM_SHARING_ACTIVITY);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Provides
|
||||||
|
@ApplicationScope
|
||||||
|
@Named(AppPrefsConstants.PATH_TO_FILE_TO_SHARE)
|
||||||
|
StringPreference providePathToFileToShare(@AppPrefs SecurePreferences sharedPreferences) {
|
||||||
|
return new StringPreference(sharedPreferences, AppPrefsConstants.PATH_TO_FILE_TO_SHARE);
|
||||||
|
}
|
||||||
|
|
||||||
@Provides
|
@Provides
|
||||||
@ApplicationScope
|
@ApplicationScope
|
||||||
@Named(AppPrefsConstants.VERIFY_CHAT_CODE_ERROR_MESSAGE)
|
@Named(AppPrefsConstants.VERIFY_CHAT_CODE_ERROR_MESSAGE)
|
||||||
|
|||||||
@@ -97,6 +97,12 @@ public interface ApplicationComponent {
|
|||||||
@Named(AppPrefsConstants.USER_PASSWORD)
|
@Named(AppPrefsConstants.USER_PASSWORD)
|
||||||
StringPreference providePassword();
|
StringPreference providePassword();
|
||||||
|
|
||||||
|
@Named(AppPrefsConstants.PATH_TO_FILE_TO_SHARE)
|
||||||
|
StringPreference providePathToFileToShare();
|
||||||
|
|
||||||
|
@Named(AppPrefsConstants.IS_COMING_FROM_SHARING_ACTIVITY)
|
||||||
|
BooleanPreference provideIsComingFromSharingActivity();
|
||||||
|
|
||||||
NotificationManager provideNotificationManager();
|
NotificationManager provideNotificationManager();
|
||||||
|
|
||||||
GroupRealmRepository provideGroupRealmRepository();
|
GroupRealmRepository provideGroupRealmRepository();
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import de.beyondsoft.ownchat.data.events.InvalidTokenEvent;
|
|||||||
import de.beyondsoft.ownchat.data.events.LogoutDirectlyEvent;
|
import de.beyondsoft.ownchat.data.events.LogoutDirectlyEvent;
|
||||||
import de.beyondsoft.ownchat.data.prefs.BooleanPreference;
|
import de.beyondsoft.ownchat.data.prefs.BooleanPreference;
|
||||||
import de.beyondsoft.ownchat.data.prefs.LongPreference;
|
import de.beyondsoft.ownchat.data.prefs.LongPreference;
|
||||||
|
import de.beyondsoft.ownchat.data.prefs.StringPreference;
|
||||||
import de.beyondsoft.ownchat.di.InjectionHelper;
|
import de.beyondsoft.ownchat.di.InjectionHelper;
|
||||||
import de.beyondsoft.ownchat.filepicker.FilePickerBuilder;
|
import de.beyondsoft.ownchat.filepicker.FilePickerBuilder;
|
||||||
import de.beyondsoft.ownchat.filepicker.FilePickerConst;
|
import de.beyondsoft.ownchat.filepicker.FilePickerConst;
|
||||||
@@ -16,6 +17,7 @@ import de.beyondsoft.ownchat.page.common.RuntimePermissionActivity;
|
|||||||
import de.beyondsoft.ownchat.page.fileconfirmation.FileConfirmationActivity;
|
import de.beyondsoft.ownchat.page.fileconfirmation.FileConfirmationActivity;
|
||||||
import de.beyondsoft.ownchat.page.login.LoginPresenter;
|
import de.beyondsoft.ownchat.page.login.LoginPresenter;
|
||||||
import de.beyondsoft.ownchat.page.main.LogoutNavigation;
|
import de.beyondsoft.ownchat.page.main.LogoutNavigation;
|
||||||
|
import de.beyondsoft.ownchat.page.main.MainActivity;
|
||||||
import de.beyondsoft.ownchat.utils.Constants;
|
import de.beyondsoft.ownchat.utils.Constants;
|
||||||
import de.beyondsoft.ownchat.utils.EndlessScrollListener;
|
import de.beyondsoft.ownchat.utils.EndlessScrollListener;
|
||||||
import de.beyondsoft.ownchat.utils.FileUtils;
|
import de.beyondsoft.ownchat.utils.FileUtils;
|
||||||
@@ -128,6 +130,14 @@ abstract class BaseChatActivity extends RuntimePermissionActivity implements Cha
|
|||||||
@Inject
|
@Inject
|
||||||
LoginPresenter mLoginPresenter;
|
LoginPresenter mLoginPresenter;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
@Named(AppPrefsConstants.PATH_TO_FILE_TO_SHARE)
|
||||||
|
StringPreference mSelectedFilePath;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
@Named(AppPrefsConstants.IS_COMING_FROM_SHARING_ACTIVITY)
|
||||||
|
BooleanPreference mIsComingFromSharingActivity;
|
||||||
|
|
||||||
protected Group mGroup;
|
protected Group mGroup;
|
||||||
protected ChatView.Callback mCallback;
|
protected ChatView.Callback mCallback;
|
||||||
protected EndlessScrollListener mEndlessScrollListener;
|
protected EndlessScrollListener mEndlessScrollListener;
|
||||||
@@ -161,6 +171,8 @@ abstract class BaseChatActivity extends RuntimePermissionActivity implements Cha
|
|||||||
showLoading();
|
showLoading();
|
||||||
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
|
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
|
||||||
getWindow().getDecorView().getViewTreeObserver().addOnGlobalLayoutListener(mKeyboardListener);
|
getWindow().getDecorView().getViewTreeObserver().addOnGlobalLayoutListener(mKeyboardListener);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setupRecyclerView() {
|
private void setupRecyclerView() {
|
||||||
@@ -218,6 +230,42 @@ abstract class BaseChatActivity extends RuntimePermissionActivity implements Cha
|
|||||||
mBaseChatAdapter.addMessages(messages);
|
mBaseChatAdapter.addMessages(messages);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void shareFile(int requestCode) {
|
||||||
|
mIsComingFromSharingActivity.set(false);
|
||||||
|
|
||||||
|
final Uri uri = Uri.parse(mSelectedFilePath.get());
|
||||||
|
final File file = FileUtils.getFile(this, uri);
|
||||||
|
String filePath = file.getPath();
|
||||||
|
|
||||||
|
mSelectedFilePath.delete();
|
||||||
|
String test = mSelectedFilePath.get();
|
||||||
|
|
||||||
|
if (Build.VERSION.SDK_INT >= 19) {
|
||||||
|
final int takeFlags = (Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
|
||||||
|
|
||||||
|
try {
|
||||||
|
//noinspection WrongConstant
|
||||||
|
getContentResolver().takePersistableUriPermission(uri, takeFlags);
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!mChatPresenter.isAttached()) {
|
||||||
|
mChatPresenter.attachView(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
Bundle bundle = new Bundle();
|
||||||
|
bundle.putString(Constants.FILENAME, filePath);
|
||||||
|
|
||||||
|
Intent intent = new Intent(this, FileConfirmationActivity.class);
|
||||||
|
intent.putExtras(bundle);
|
||||||
|
|
||||||
|
intent.putExtra(Constants.EXTRA_GROUP, mGroup);
|
||||||
|
|
||||||
|
startActivityForResult(intent, 666);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void showError(@StringRes int errorRes) {
|
public void showError(@StringRes int errorRes) {
|
||||||
if (mSnackbar == null) {
|
if (mSnackbar == null) {
|
||||||
@@ -247,6 +295,13 @@ abstract class BaseChatActivity extends RuntimePermissionActivity implements Cha
|
|||||||
@Override
|
@Override
|
||||||
public void hideMessagesLoading() {
|
public void hideMessagesLoading() {
|
||||||
mBaseChatAdapter.setLoading(false);
|
mBaseChatAdapter.setLoading(false);
|
||||||
|
|
||||||
|
if(mIsComingFromSharingActivity.get()) {
|
||||||
|
requestAppPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
|
||||||
|
R.string.permission_storage_explained,
|
||||||
|
STORAGE_REQUEST_CODE,
|
||||||
|
this::shareFile);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -568,4 +623,9 @@ abstract class BaseChatActivity extends RuntimePermissionActivity implements Cha
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onBackPressed() {
|
||||||
|
startActivity(new Intent(this, MainActivity.class));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -102,6 +102,10 @@ public class ChatPresenter extends MVPAbstractPresenter<ChatView> implements Cha
|
|||||||
@Named(AppPrefsConstants.UPLOAD_MAX_SIZE)
|
@Named(AppPrefsConstants.UPLOAD_MAX_SIZE)
|
||||||
LongPreference mUploadMaxSizePreference;
|
LongPreference mUploadMaxSizePreference;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
@Named(AppPrefsConstants.VERIFY_CHAT_CODE_ERROR_MESSAGE)
|
||||||
|
StringPreference mVerifyChatCodeErrorMessage;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
RealmProvider mRealmProvider;
|
RealmProvider mRealmProvider;
|
||||||
|
|
||||||
|
|||||||
@@ -38,8 +38,10 @@ public class SingleChatActivity extends BaseChatActivity {
|
|||||||
@Override
|
@Override
|
||||||
public void onCreate(@Nullable Bundle savedInstanceState) {
|
public void onCreate(@Nullable Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
|
|
||||||
mChatPresenter.attachView(this);
|
mChatPresenter.attachView(this);
|
||||||
mCallback.resetMessages();
|
mCallback.resetMessages();
|
||||||
|
|
||||||
if (getIntent().hasExtra(MESSAGE_ARG)) {
|
if (getIntent().hasExtra(MESSAGE_ARG)) {
|
||||||
Bundle bundle = getIntent().getBundleExtra(MESSAGE_ARG);
|
Bundle bundle = getIntent().getBundleExtra(MESSAGE_ARG);
|
||||||
mGroup = new Group();
|
mGroup = new Group();
|
||||||
@@ -53,6 +55,7 @@ public class SingleChatActivity extends BaseChatActivity {
|
|||||||
} else {
|
} else {
|
||||||
mCallback.loadMessagesFromServerByGroupId(mGroup.id);
|
mCallback.loadMessagesFromServerByGroupId(mGroup.id);
|
||||||
}
|
}
|
||||||
|
|
||||||
mCallback.findGroupById();
|
mCallback.findGroupById();
|
||||||
} else {
|
} else {
|
||||||
setGroupFromArguments();
|
setGroupFromArguments();
|
||||||
|
|||||||
@@ -187,6 +187,7 @@ public class ContactsFragment extends BaseFragment
|
|||||||
if (TextUtils.isEmpty(mSearchView.getQuery())) {
|
if (TextUtils.isEmpty(mSearchView.getQuery())) {
|
||||||
mSearchView.setIconified(true);
|
mSearchView.setIconified(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
startActivity(GroupChatActivity.createIntent(getActivity(), group));
|
startActivity(GroupChatActivity.createIntent(getActivity(), group));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -27,10 +27,11 @@ import butterknife.BindView;
|
|||||||
import butterknife.ButterKnife;
|
import butterknife.ButterKnife;
|
||||||
import de.beyondsoft.ownchat.R;
|
import de.beyondsoft.ownchat.R;
|
||||||
import de.beyondsoft.ownchat.data.AppPrefsConstants;
|
import de.beyondsoft.ownchat.data.AppPrefsConstants;
|
||||||
|
import de.beyondsoft.ownchat.data.prefs.BooleanPreference;
|
||||||
import de.beyondsoft.ownchat.data.prefs.LongPreference;
|
import de.beyondsoft.ownchat.data.prefs.LongPreference;
|
||||||
|
import de.beyondsoft.ownchat.data.prefs.StringPreference;
|
||||||
import de.beyondsoft.ownchat.di.InjectionHelper;
|
import de.beyondsoft.ownchat.di.InjectionHelper;
|
||||||
import de.beyondsoft.ownchat.model.Group;
|
import de.beyondsoft.ownchat.model.Group;
|
||||||
import de.beyondsoft.ownchat.page.chat.BaseChatActivity;
|
|
||||||
import de.beyondsoft.ownchat.page.chat.GroupChatActivity;
|
import de.beyondsoft.ownchat.page.chat.GroupChatActivity;
|
||||||
import de.beyondsoft.ownchat.page.chat.SingleChatActivity;
|
import de.beyondsoft.ownchat.page.chat.SingleChatActivity;
|
||||||
import de.beyondsoft.ownchat.page.fileconfirmation.FileConfirmationActivity;
|
import de.beyondsoft.ownchat.page.fileconfirmation.FileConfirmationActivity;
|
||||||
@@ -65,19 +66,18 @@ public class SharingActivity extends AppCompatActivity implements SharingView, S
|
|||||||
@BindView(R.id.chat_toolbar_single_title)
|
@BindView(R.id.chat_toolbar_single_title)
|
||||||
TextView mSingleChatTitleTextView;
|
TextView mSingleChatTitleTextView;
|
||||||
|
|
||||||
@BindView(R.id.chat_toolbar_image_view)
|
@Inject
|
||||||
ImageView mChatImageView;
|
@Named(AppPrefsConstants.PATH_TO_FILE_TO_SHARE)
|
||||||
|
StringPreference mSelectedFilePath;
|
||||||
|
|
||||||
@BindView(R.id.chat_toolbar_extra_image)
|
@Inject
|
||||||
ImageView mExtraImageView;
|
@Named(AppPrefsConstants.IS_COMING_FROM_SHARING_ACTIVITY)
|
||||||
|
BooleanPreference mIsComingFromSharingActivity;
|
||||||
|
|
||||||
private SharingView.Callback mCallback;
|
private SharingView.Callback mCallback;
|
||||||
private SharingContactsAdapter mContactsAdapter;
|
private SharingContactsAdapter mContactsAdapter;
|
||||||
private RecyclerView.ItemDecoration mHorizontalDividerItemDecoration;
|
|
||||||
private Snackbar mSnackbar;
|
private Snackbar mSnackbar;
|
||||||
|
|
||||||
private Uri selectedFileUri = null;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(@Nullable Bundle savedInstanceState) {
|
protected void onCreate(@Nullable Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
@@ -89,9 +89,7 @@ public class SharingActivity extends AppCompatActivity implements SharingView, S
|
|||||||
|
|
||||||
mSharingPresenter.attachView(this);
|
mSharingPresenter.attachView(this);
|
||||||
|
|
||||||
mHorizontalDividerItemDecoration = new HorizontalDividerItemDecoration.Builder(this).colorResId(R.color.colorFill).build();
|
mContactsRecyclerView.addItemDecoration(new HorizontalDividerItemDecoration.Builder(this).colorResId(R.color.colorFill).build());
|
||||||
|
|
||||||
mContactsRecyclerView.addItemDecoration(mHorizontalDividerItemDecoration);
|
|
||||||
mContactsRecyclerView.setLayoutManager(new LinearLayoutManager(this));
|
mContactsRecyclerView.setLayoutManager(new LinearLayoutManager(this));
|
||||||
|
|
||||||
mContactsAdapter = new SharingContactsAdapter(this, mUserIdPreference.get());
|
mContactsAdapter = new SharingContactsAdapter(this, mUserIdPreference.get());
|
||||||
@@ -117,7 +115,8 @@ public class SharingActivity extends AppCompatActivity implements SharingView, S
|
|||||||
Uri fileUri = intent.getParcelableExtra(Intent.EXTRA_STREAM);
|
Uri fileUri = intent.getParcelableExtra(Intent.EXTRA_STREAM);
|
||||||
|
|
||||||
if (fileUri != null) {
|
if (fileUri != null) {
|
||||||
selectedFileUri = fileUri;
|
mSelectedFilePath.set(fileUri.toString());
|
||||||
|
mIsComingFromSharingActivity.set(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -140,16 +139,13 @@ public class SharingActivity extends AppCompatActivity implements SharingView, S
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onConfirmSharingFile(Group contact) {
|
public void onOpenGroupMessage(Group group) {
|
||||||
Bundle bundle = new Bundle();
|
startActivity(GroupChatActivity.createIntent(this, group));
|
||||||
bundle.putString(Constants.FILENAME, FileUtils.getPath(this, selectedFileUri));
|
}
|
||||||
|
|
||||||
Intent intent = new Intent(this, FileConfirmationActivity.class);
|
@Override
|
||||||
intent.putExtras(bundle);
|
public void onOpenPrivateMessage(Group contact) {
|
||||||
|
startActivity(SingleChatActivity.createIntent(this, contact));
|
||||||
intent.putExtra(Constants.EXTRA_GROUP, contact);
|
|
||||||
|
|
||||||
startActivityForResult(intent, 666);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -203,6 +199,6 @@ public class SharingActivity extends AppCompatActivity implements SharingView, S
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void showToastMessage(@StringRes int message) {
|
public void showToastMessage(@StringRes int message) {
|
||||||
Toast.makeText(BaseChatActivity.this, message, Toast.LENGTH_SHORT).show();
|
Toast.makeText(this, message, Toast.LENGTH_SHORT).show();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,7 +32,9 @@ public class SharingContactsAdapter extends RecyclerView.Adapter<RecyclerView.Vi
|
|||||||
private long mUserId;
|
private long mUserId;
|
||||||
|
|
||||||
interface OnOpenClickListener {
|
interface OnOpenClickListener {
|
||||||
void onConfirmSharingFile(Group contact);
|
void onOpenGroupMessage(Group group);
|
||||||
|
|
||||||
|
void onOpenPrivateMessage(Group contact);
|
||||||
}
|
}
|
||||||
|
|
||||||
SharingContactsAdapter(OnOpenClickListener openClickListener, long userId) {
|
SharingContactsAdapter(OnOpenClickListener openClickListener, long userId) {
|
||||||
@@ -115,17 +117,14 @@ public class SharingContactsAdapter extends RecyclerView.Adapter<RecyclerView.Vi
|
|||||||
|
|
||||||
@OnClick(R.id.sharing_contact_container)
|
@OnClick(R.id.sharing_contact_container)
|
||||||
void onClickContact() {
|
void onClickContact() {
|
||||||
// int type = getItemViewType();
|
int type = getItemViewType();
|
||||||
//
|
|
||||||
// if (type == GROUP_TYPE) {
|
|
||||||
// mItemClickListener.onOpenGroupMessage(mGroups.get(getAdapterPosition()));
|
|
||||||
// return;
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// mItemClickListener.onOpenPrivateMessage(mGroups.get(getAdapterPosition()));
|
|
||||||
|
|
||||||
mItemClickListener.onConfirmSharingFile(mGroups.get(getAdapterPosition()));
|
if (type == GROUP_TYPE) {
|
||||||
// TODO: open file confirmation!
|
mItemClickListener.onOpenGroupMessage(mGroups.get(getAdapterPosition()));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
mItemClickListener.onOpenPrivateMessage(mGroups.get(getAdapterPosition()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -165,6 +165,11 @@ public class SharingPresenter extends MVPAbstractPresenter<SharingView> implemen
|
|||||||
.subscribe(this::loadGroupsFromDBSuccessful, this::loadGroupsError);
|
.subscribe(this::loadGroupsFromDBSuccessful, this::loadGroupsError);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void sendFile(Uri fileUri, String messageText) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
private void loadGroupsFromDBSuccessful(ArrayList<Group> groups) {
|
private void loadGroupsFromDBSuccessful(ArrayList<Group> groups) {
|
||||||
if (!isAttached()) {
|
if (!isAttached()) {
|
||||||
return;
|
return;
|
||||||
@@ -177,151 +182,4 @@ public class SharingPresenter extends MVPAbstractPresenter<SharingView> implemen
|
|||||||
private void loadGroupsError(Throwable throwable) {
|
private void loadGroupsError(Throwable throwable) {
|
||||||
Log.e(SharingPresenter.class.getSimpleName(), throwable.getMessage(), throwable);
|
Log.e(SharingPresenter.class.getSimpleName(), throwable.getMessage(), throwable);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void sendFile(Uri fileUri, String messageText, long groupId) {
|
|
||||||
File file = getView().getFile(fileUri);
|
|
||||||
|
|
||||||
final String mimeType = FileUtils.getMimeType(file);
|
|
||||||
|
|
||||||
if (file == null || !file.exists()) {
|
|
||||||
getView().showToastMessage(R.string.error_file_not_found);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(mUploadMaxSizePreference.get() > 0 && file.length() > mUploadMaxSizePreference.get()) {
|
|
||||||
getView().showError(R.string.error_file_is_too_large);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(mimeType != null && (mimeType.equals(Constants.MIME_TYPE_JPEG) || mimeType.equals(Constants.MIME_TYPE_PNG)) && (file.length() > (1000L * 1024L))) {
|
|
||||||
FileUtils.clearTmpFilesDir(mContext);
|
|
||||||
|
|
||||||
file = FileUtils.scaleImageDown(file, mContext);
|
|
||||||
}
|
|
||||||
|
|
||||||
final File fileToSend = file;
|
|
||||||
|
|
||||||
String[] split = fileToSend.getAbsolutePath().split("/");
|
|
||||||
|
|
||||||
Message message = new Message(findUniqueRandomId(mRealmProvider, mUserIdReference.get()),
|
|
||||||
groupId,
|
|
||||||
System.currentTimeMillis() / 1000,
|
|
||||||
messageText,
|
|
||||||
fileToSend.getPath(),
|
|
||||||
fileToSend.getPath(),
|
|
||||||
split[split.length - 1],
|
|
||||||
fileUri.toString(),
|
|
||||||
mUserIdReference.get(),
|
|
||||||
mProfileNamePreference.get(),
|
|
||||||
mAvatarPreference.get(),
|
|
||||||
Message.Status.PENDING,
|
|
||||||
true,
|
|
||||||
mUserIdReference.get(),
|
|
||||||
false);
|
|
||||||
|
|
||||||
storeMessageLocally(message).subscribe(new Subscriber<Object>() {
|
|
||||||
@Override
|
|
||||||
public void onCompleted() {
|
|
||||||
if (mSystemUtils.isNetworkUnavailable()) {
|
|
||||||
getView().showError(R.string.error_no_internet_connection);
|
|
||||||
message.status = Message.Status.FAILED;
|
|
||||||
message.isRead = true;
|
|
||||||
storeMessageLocally(message, message.id, true);
|
|
||||||
storeGroupLocally(groupId, message);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
checkForEmptyMessageAndHideIt();
|
|
||||||
message.createdAt *= 1000;
|
|
||||||
getView().addOneMessage(message);
|
|
||||||
|
|
||||||
// create RequestBody instance from file
|
|
||||||
RequestBody requestFile = RequestBody.create(getView().getMediaType(mimeType), fileToSend);
|
|
||||||
|
|
||||||
// MultipartBody.Part is used to send also the actual file name
|
|
||||||
MultipartBody.Part body = MultipartBody.Part.createFormData("file", fileToSend.getName(), requestFile);
|
|
||||||
|
|
||||||
// add another part within the multipart request
|
|
||||||
String groupIdString = String.valueOf(groupId);
|
|
||||||
RequestBody groupIdBody = RequestBody.create(okhttp3.MultipartBody.FORM, groupIdString);
|
|
||||||
|
|
||||||
RequestBody textBody = RequestBody.create(okhttp3.MultipartBody.FORM, message.message == null ? "" : message.message);
|
|
||||||
|
|
||||||
mChatService.sendFile(groupIdBody, body, textBody)
|
|
||||||
.compose(RxUtils.provideDefaultTransformer())
|
|
||||||
.flatMap(new ErrorHandlingResponseConverter<>())
|
|
||||||
.subscribe(new Subscriber<MessageResponse>() {
|
|
||||||
@Override
|
|
||||||
public void onCompleted() {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onError(Throwable e) {
|
|
||||||
FileUtils.clearTmpFilesDir(mContext);
|
|
||||||
Log.e("sendFile", "onError", e);
|
|
||||||
@SuppressWarnings("UnnecessaryLocalVariable") Message newMessage = message;
|
|
||||||
newMessage.createdAt /= 1000;
|
|
||||||
newMessage.status = Message.Status.FAILED;
|
|
||||||
newMessage.isRead = true;
|
|
||||||
storeMessageLocally(newMessage, message.id, false);
|
|
||||||
storeGroupLocally(groupId, message);
|
|
||||||
|
|
||||||
if (!isAttached()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mSystemUtils.isNetworkUnavailable()) {
|
|
||||||
getView().showError(R.string.error_no_internet_connection);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
getView().showError(R.string.error_something_went_wrong);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onNext(MessageResponse baseResponse) {
|
|
||||||
FileUtils.clearTmpFilesDir(mContext);
|
|
||||||
deleteLocalMessage(message);
|
|
||||||
baseResponse.response.message.status = Message.Status.DELIVERED;
|
|
||||||
baseResponse.response.message.isRead = true;
|
|
||||||
storeMessageLocally(baseResponse.response.message, message.id, false);
|
|
||||||
storeGroupLocally(groupId, baseResponse.response.message);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onError(Throwable e) {
|
|
||||||
Log.e("sendFile", "onError", e);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onNext(Object o) {
|
|
||||||
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
private Completable storeMessageLocally(Message message) {
|
|
||||||
MessageByIdSpecification messageByIdSpecification = new MessageByIdSpecification(mUserIdReference.get());
|
|
||||||
messageByIdSpecification.setMessageId(message.id);
|
|
||||||
|
|
||||||
return mMessageRealmRepository.update(message, messageByIdSpecification)
|
|
||||||
.subscribeOn(Schedulers.io())
|
|
||||||
.observeOn(AndroidSchedulers.mainThread());
|
|
||||||
}
|
|
||||||
|
|
||||||
private void storeGroupLocally(long groupId, Message message) {
|
|
||||||
Group group = new Group();
|
|
||||||
group.id = groupId;
|
|
||||||
group.lastMessage = message;
|
|
||||||
mGroupRealmRepository.updateGroupMessage(group, new GroupByIdSpecification(mUserIdReference.get()))
|
|
||||||
.subscribe(() -> {
|
|
||||||
if (!isAttached()) {
|
|
||||||
EventBus.getDefault().post(new GroupUpdatedEvent());
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,13 +3,15 @@
|
|||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:id="@+id/sharing_contacts_coordinator_layout"
|
android:id="@+id/sharing_contacts_coordinator_layout"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent">
|
android:layout_height="match_parent"
|
||||||
|
>
|
||||||
|
|
||||||
<include layout="@layout/chat_toolbar" />
|
<include layout="@layout/chat_toolbar" />
|
||||||
|
|
||||||
<FrameLayout
|
<FrameLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent">
|
android:layout_height="match_parent"
|
||||||
|
android:layout_marginTop="?attr/actionBarSize">
|
||||||
|
|
||||||
<android.support.v7.widget.RecyclerView
|
<android.support.v7.widget.RecyclerView
|
||||||
android:id="@+id/sharing_contacts_recycler_view"
|
android:id="@+id/sharing_contacts_recycler_view"
|
||||||
|
|||||||
Reference in New Issue
Block a user