diff --git a/ring-android/app/src/main/java/cx/ring/account/JamiAccountSummaryFragment.java b/ring-android/app/src/main/java/cx/ring/account/JamiAccountSummaryFragment.java index c4ed1a8bbae6eef8334950fb76f4e0acae50bdf1..dbed7614b88186f6a8e19f82c16ab545c93a3166 100644 --- a/ring-android/app/src/main/java/cx/ring/account/JamiAccountSummaryFragment.java +++ b/ring-android/app/src/main/java/cx/ring/account/JamiAccountSummaryFragment.java @@ -489,7 +489,7 @@ public class JamiAccountSummaryFragment extends BaseSupportFragment<JamiAccountS .setNegativeButton(android.R.string.cancel, (dialog, which) -> dialog.cancel()) .setPositiveButton(android.R.string.ok, (dialog, which) -> { if (mSourcePhoto != null) { - presenter.saveVCard(mAccountService.getCurrentAccount(), editText.getText().toString().trim(), Single.just(mSourcePhoto).map(BitmapUtils::bitmapToPhoto)); + presenter.saveVCard(editText.getText().toString().trim(), Single.just(mSourcePhoto).map(BitmapUtils::bitmapToPhoto)); mSourcePhoto = null; } else { presenter.saveVCardFormattedName(editText.getText().toString().trim()); diff --git a/ring-android/app/src/main/java/cx/ring/tv/account/TVProfileEditingFragment.java b/ring-android/app/src/main/java/cx/ring/tv/account/TVProfileEditingFragment.java index 3ccc889a8716f0d5e1888d6ade1856016f3375eb..af550c94eff013a51a01b33f7abbb564503e123c 100644 --- a/ring-android/app/src/main/java/cx/ring/tv/account/TVProfileEditingFragment.java +++ b/ring-android/app/src/main/java/cx/ring/tv/account/TVProfileEditingFragment.java @@ -24,7 +24,6 @@ import android.content.ActivityNotFoundException; import android.content.ContentResolver; import android.content.Intent; import android.content.pm.PackageManager; -import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.drawable.Drawable; import android.net.Uri; @@ -37,8 +36,6 @@ import android.text.TextUtils; import android.util.Log; import android.view.View; -import java.io.FileNotFoundException; -import java.io.InputStream; import java.util.List; import cx.ring.R; @@ -77,14 +74,10 @@ public class TVProfileEditingFragment extends JamiGuidedStepFragment<HomeNavigat return; } Uri uri = (Uri) extras.get((MediaStore.EXTRA_OUTPUT)); - ContentResolver cr = getActivity().getContentResolver(); - try { - InputStream is = cr.openInputStream(uri); - Bitmap image = BitmapFactory.decodeStream(is); - presenter.saveVCardPhoto(Single.just(image) + if (uri != null) { + ContentResolver cr = requireContext().getContentResolver(); + presenter.saveVCardPhoto(Single.fromCallable(() -> BitmapFactory.decodeStream(cr.openInputStream(uri))) .map(BitmapUtils::bitmapToPhoto)); - } catch (FileNotFoundException e) { - e.printStackTrace(); } } break; @@ -130,7 +123,7 @@ public class TVProfileEditingFragment extends JamiGuidedStepFragment<HomeNavigat String title = getString(R.string.profile); String breadcrumb = ""; String description = getString(R.string.profile_message_warning); - Drawable icon = getActivity().getResources().getDrawable(R.drawable.ic_contact_picture_fallback); + Drawable icon = getResources().getDrawable(R.drawable.ic_contact_picture_fallback); return new GuidanceStylist.Guidance(title, description, breadcrumb, icon); } @@ -142,8 +135,8 @@ public class TVProfileEditingFragment extends JamiGuidedStepFragment<HomeNavigat @Override public void onCreateActions(@NonNull List<GuidedAction> actions, Bundle savedInstanceState) { addEditTextAction(getActivity(), actions, USER_NAME, R.string.account_edit_profile, R.string.profile_name_hint); - addAction(getActivity(), actions, CAMERA, getActivity().getResources().getString(R.string.take_a_photo), ""); - addAction(getActivity(), actions, GALLERY, getActivity().getResources().getString(R.string.open_the_gallery), ""); + addAction(getActivity(), actions, CAMERA, R.string.take_a_photo); + addAction(getActivity(), actions, GALLERY, R.string.open_the_gallery); this.actions = actions; } diff --git a/ring-android/app/src/main/java/cx/ring/tv/conversation/TvConversationFragment.java b/ring-android/app/src/main/java/cx/ring/tv/conversation/TvConversationFragment.java index 4e8eb61412ac69dfa7e105aae9ff9024b9dbb700..c5b3e054bf2bebad7e1eb57d5e0f6b3a30dbe31b 100644 --- a/ring-android/app/src/main/java/cx/ring/tv/conversation/TvConversationFragment.java +++ b/ring-android/app/src/main/java/cx/ring/tv/conversation/TvConversationFragment.java @@ -170,7 +170,6 @@ public class TvConversationFragment extends BaseSupportFragment<TvConversationPr super.onViewCreated(view, savedInstanceState); ConversationPath path = ConversationPath.fromIntent(getActivity().getIntent()); - presenter.init(path); mAdapter = new TvConversationAdapter(this, presenter); @@ -217,13 +216,16 @@ public class TvConversationFragment extends BaseSupportFragment<TvConversationPr mSubTitle = view.findViewById(R.id.subtitle); mRecyclerView = view.findViewById(R.id.recycler_view); - String id = mTvListViewModel.getContact().getRingUsername(); - String displayName = mTvListViewModel.getContact().getDisplayName(); - mTitle.setText(displayName); - if (TextUtils.isEmpty(displayName) || !displayName.equals(id)) - mSubTitle.setText(id); - else - mSubTitle.setVisibility(View.GONE); + CallContact contact = mTvListViewModel.getContact(); + if (contact != null) { + String id = contact.getRingUsername(); + String displayName = contact.getDisplayName(); + mTitle.setText(displayName); + if (TextUtils.isEmpty(displayName) || !displayName.equals(id)) + mSubTitle.setText(id); + else + mSubTitle.setVisibility(View.GONE); + } LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getContext()); linearLayoutManager.setReverseLayout(true); diff --git a/ring-android/app/src/main/java/cx/ring/tv/conversation/TvConversationPresenter.java b/ring-android/app/src/main/java/cx/ring/tv/conversation/TvConversationPresenter.java index 6549376bae5adc312c110a925cd44852d6d736e1..ce3f6e706f7a1e9a9aca1dbf2e0f4ceba9d30c8f 100644 --- a/ring-android/app/src/main/java/cx/ring/tv/conversation/TvConversationPresenter.java +++ b/ring-android/app/src/main/java/cx/ring/tv/conversation/TvConversationPresenter.java @@ -80,12 +80,13 @@ public class TvConversationPresenter extends RootPresenter<TvConversationView> { mContactId = new Uri(path.getContactId()); mContactRingId = new Uri(path.getContactId()); + mCompositeDisposable.add(mAccountService.getCurrentAccountSubject() + .subscribe(account -> initContact(account, new Uri(mContactId.getRawUriString()), getView()))); + mCompositeDisposable.add(mAccountService.getCurrentAccountSubject() .switchMapSingle(account -> mConversationFacade.loadConversationHistory(account, new Uri(mContactId.getRawUriString()))) .observeOn(mUiScheduler) .subscribe(this::setConversation)); - - initContact(mAccountService.getCurrentAccount(), new Uri(mContactId.getRawUriString()), getView()); } public void sendText(String message){ diff --git a/ring-android/libringclient/src/main/java/cx/ring/account/JamiAccountSummaryPresenter.java b/ring-android/libringclient/src/main/java/cx/ring/account/JamiAccountSummaryPresenter.java index dcf3185372f328ac2a7366010f6f647e8c4e6e73..de84d64223ab2314a7b177fa25f9556eec2ba56f 100644 --- a/ring-android/libringclient/src/main/java/cx/ring/account/JamiAccountSummaryPresenter.java +++ b/ring-android/libringclient/src/main/java/cx/ring/account/JamiAccountSummaryPresenter.java @@ -21,7 +21,6 @@ package cx.ring.account; import java.io.File; -import java.io.IOException; import java.net.SocketException; import javax.inject.Inject; @@ -32,7 +31,6 @@ import cx.ring.mvp.RootPresenter; import cx.ring.services.AccountService; import cx.ring.services.DeviceRuntimeService; import cx.ring.services.HardwareService; -import cx.ring.utils.FileUtils; import cx.ring.utils.Log; import cx.ring.utils.StringUtils; import cx.ring.utils.VCardUtils; @@ -167,16 +165,15 @@ public class JamiAccountSummaryPresenter extends RootPresenter<JamiAccountSummar } public void saveVCardFormattedName(String username) { - Account account = mAccountService.getCurrentAccount(); - String accountId = account.getAccountID(); + Account account = mAccountService.getAccount(mAccountID); File filesDir = mDeviceRuntimeService.provideFilesDir(); - mCompositeDisposable.add(VCardUtils.loadLocalProfileFromDisk(filesDir, accountId) + mCompositeDisposable.add(VCardUtils.loadLocalProfileFromDisk(filesDir, mAccountID) .doOnSuccess(vcard -> { vcard.setFormattedName(username); vcard.removeProperties(RawProperty.class); }) - .flatMap(vcard -> VCardUtils.saveLocalProfileToDisk(vcard, accountId, filesDir)) + .flatMap(vcard -> VCardUtils.saveLocalProfileToDisk(vcard, mAccountID, filesDir)) .subscribeOn(Schedulers.io()) .subscribe(vcard -> { account.setProfile(vcard); @@ -185,25 +182,23 @@ public class JamiAccountSummaryPresenter extends RootPresenter<JamiAccountSummar }, e -> Log.e(TAG, "Error saving vCard !", e))); } - public void saveVCard(Account account, String username, Single<Photo> photo) { - String accountId = account.getAccountID(); + public void saveVCard(String username, Single<Photo> photo) { + Account account = mAccountService.getAccount(mAccountID); String ringId = account.getUsername(); File filesDir = mDeviceRuntimeService.provideFilesDir(); mCompositeDisposable.add(Single.zip( - VCardUtils.loadLocalProfileFromDisk(filesDir, accountId).subscribeOn(Schedulers.io()), + VCardUtils.loadLocalProfileFromDisk(filesDir, mAccountID).subscribeOn(Schedulers.io()), photo, (vcard, pic) -> { vcard.setUid(new Uid(ringId)); if (!StringUtils.isEmpty(username)) { vcard.setFormattedName(username); } - if (photo != null) { - vcard.removeProperties(Photo.class); - vcard.addPhoto(pic); - } + vcard.removeProperties(Photo.class); + vcard.addPhoto(pic); vcard.removeProperties(RawProperty.class); return vcard; }) - .flatMap(vcard -> VCardUtils.saveLocalProfileToDisk(vcard, accountId, filesDir)) + .flatMap(vcard -> VCardUtils.saveLocalProfileToDisk(vcard, mAccountID, filesDir)) .subscribeOn(Schedulers.io()) .subscribe(vcard -> { account.setProfile(vcard); diff --git a/ring-android/libringclient/src/main/java/cx/ring/navigation/HomeNavigationPresenter.java b/ring-android/libringclient/src/main/java/cx/ring/navigation/HomeNavigationPresenter.java index a049eff480f44ba1f972e82a0e1a81c4015c91c3..f08d88766d8983e7fa70d0527d4bc98f4e845c5b 100644 --- a/ring-android/libringclient/src/main/java/cx/ring/navigation/HomeNavigationPresenter.java +++ b/ring-android/libringclient/src/main/java/cx/ring/navigation/HomeNavigationPresenter.java @@ -94,8 +94,11 @@ public class HomeNavigationPresenter extends RootPresenter<HomeNavigationView> { File filesDir = mDeviceRuntimeService.provideFilesDir(); mCompositeDisposable.add(Single.zip( - VCardUtils.loadLocalProfileFromDisk(filesDir, accountId).subscribeOn(Schedulers.io()), - photo, (vcard, pic) -> { + VCardUtils.loadLocalProfileFromDisk(filesDir, accountId) + .subscribeOn(Schedulers.io()), + photo + .subscribeOn(Schedulers.io()), + (vcard, pic) -> { vcard.setUid(new Uid(ringId)); vcard.removeProperties(Photo.class); vcard.addPhoto(pic); diff --git a/ring-android/libringclient/src/main/java/cx/ring/utils/VCardUtils.java b/ring-android/libringclient/src/main/java/cx/ring/utils/VCardUtils.java index 4744306abd1e72c5a82a92b0313271bb4285092b..c145089a5ec3cafaea3c92050b42a545a726b1e4 100644 --- a/ring-android/libringclient/src/main/java/cx/ring/utils/VCardUtils.java +++ b/ring-android/libringclient/src/main/java/cx/ring/utils/VCardUtils.java @@ -121,11 +121,9 @@ public final class VCardUtils { } File file = new File(path + File.separator + filename); - try { - VCardWriter writer = new VCardWriter(file, VCardVersion.V2_1); + try (VCardWriter writer = new VCardWriter(file, VCardVersion.V2_1)) { writer.getVObjectWriter().getFoldedLineWriter().setLineLength(null); writer.write(vcard); - writer.close(); } catch (Exception e) { Log.e(TAG, "Error while saving VCard to disk", e); }