From 20df00c2817205b93506b218e0a23af1e6e8da5b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adrien=20B=C3=A9raud?= <adrien.beraud@savoirfairelinux.com> Date: Fri, 1 May 2020 19:35:10 -0400 Subject: [PATCH] various fixes Change-Id: I84b3d78d8e8ef8dc3edc5df79dc38f9f93de4f6e --- .../java/cx/ring/about/AboutFragment.java | 2 +- .../ring/account/AccountEditionFragment.java | 31 ++++++++-------- .../java/cx/ring/client/HomeActivity.java | 12 ++++--- .../ContactRequestsFragment.java | 13 +++---- .../ring/fragments/ConversationFragment.java | 24 ++++++------- .../fragments/LocationSharingFragment.java | 9 +++-- .../java/cx/ring/mvp/BaseSupportFragment.java | 9 +++-- .../tv/account/TVJamiLinkAccountFragment.java | 4 +-- .../cx/ring/tv/account/TVShareFragment.java | 2 +- .../conversation/TvConversationFragment.java | 36 +++++++++++-------- .../java/cx/ring/utils/ContentUriHandler.java | 1 - .../app/src/main/res/values/strings.xml | 3 +- 12 files changed, 76 insertions(+), 70 deletions(-) diff --git a/ring-android/app/src/main/java/cx/ring/about/AboutFragment.java b/ring-android/app/src/main/java/cx/ring/about/AboutFragment.java index 4b2b67bcb..8781a701c 100644 --- a/ring-android/app/src/main/java/cx/ring/about/AboutFragment.java +++ b/ring-android/app/src/main/java/cx/ring/about/AboutFragment.java @@ -100,7 +100,7 @@ public class AboutFragment extends BaseSupportFragment<RootPresenter> { } FragmentManager fragmentManager = getActivity().getSupportFragmentManager(); - Fragment existingFragment = fragmentManager.findFragmentByTag(AboutFragment.TAG); + Fragment existingFragment = fragmentManager.findFragmentByTag(TAG); if (existingFragment == null) { ((HomeActivity) getActivity()).goToAbout(); } diff --git a/ring-android/app/src/main/java/cx/ring/account/AccountEditionFragment.java b/ring-android/app/src/main/java/cx/ring/account/AccountEditionFragment.java index a6e7c61b3..0329a4f64 100644 --- a/ring-android/app/src/main/java/cx/ring/account/AccountEditionFragment.java +++ b/ring-android/app/src/main/java/cx/ring/account/AccountEditionFragment.java @@ -137,7 +137,7 @@ public class AccountEditionFragment extends BaseSupportFragment<AccountEditionPr @Override public void displaySummary(String accountId) { - toggleView(accountId); + toggleView(accountId, true); FragmentManager fragmentManager = requireFragmentManager(); Fragment existingFragment = fragmentManager.findFragmentByTag(JamiAccountSummaryFragment.TAG); if (existingFragment == null) { @@ -157,7 +157,7 @@ public class AccountEditionFragment extends BaseSupportFragment<AccountEditionPr @Override public void displaySIPView(String accountId) { - toggleView(accountId); + toggleView(accountId, false); } @Override @@ -230,8 +230,8 @@ public class AccountEditionFragment extends BaseSupportFragment<AccountEditionPr if (getActivity() instanceof HomeActivity) ((HomeActivity) getActivity()).setToolbarOutlineState(true); if (binding.fragmentContainer.getVisibility() != View.VISIBLE) { - toggleView(mAccountId); - return true; + // toggleView(mAccountId); + return true; } FragmentManager fragmentManager = requireFragmentManager(); JamiAccountSummaryFragment summaryFragment = (JamiAccountSummaryFragment) fragmentManager.findFragmentByTag(JamiAccountSummaryFragment.TAG); @@ -244,22 +244,21 @@ public class AccountEditionFragment extends BaseSupportFragment<AccountEditionPr return fragment instanceof JamiAccountSummaryFragment; } - private void toggleView(String accountId) { + private void toggleView(String accountId, boolean isJami) { mAccountId = accountId; - boolean isRing = presenter.getAccount(mAccountId).isRing(); - - binding.slidingTabs.setVisibility(isRing? View.GONE : View.VISIBLE); - binding.pager.setVisibility(isRing? View.GONE : View.VISIBLE); - binding.fragmentContainer.setVisibility(isRing? View.VISIBLE : View.GONE); + binding.slidingTabs.setVisibility(isJami? View.GONE : View.VISIBLE); + binding.pager.setVisibility(isJami? View.GONE : View.VISIBLE); + binding.fragmentContainer.setVisibility(isJami? View.VISIBLE : View.GONE); presenter.prepareOptionsMenu(); - setBackListenerEnabled(isRing); + setBackListenerEnabled(isJami); FragmentManager fragmentManager = requireFragmentManager(); - JamiAccountSummaryFragment fragment = (JamiAccountSummaryFragment) fragmentManager.findFragmentByTag(JamiAccountSummaryFragment.TAG); - if (fragment != null) { - fragment.setFragmentVisibility(isRing); - if (isRing) - fragment.setAccount(accountId); + Fragment fragment = fragmentManager.findFragmentByTag(JamiAccountSummaryFragment.TAG); + if (fragment instanceof JamiAccountSummaryFragment) { + JamiAccountSummaryFragment f = (JamiAccountSummaryFragment) fragment; + f.setFragmentVisibility(isJami); + if (isJami) + f.setAccount(accountId); } } diff --git a/ring-android/app/src/main/java/cx/ring/client/HomeActivity.java b/ring-android/app/src/main/java/cx/ring/client/HomeActivity.java index 5de849727..4c8fb60e2 100644 --- a/ring-android/app/src/main/java/cx/ring/client/HomeActivity.java +++ b/ring-android/app/src/main/java/cx/ring/client/HomeActivity.java @@ -371,7 +371,7 @@ public class HomeActivity extends AppCompatActivity implements BottomNavigationV bundle.putString(ContactRequestsFragment.ACCOUNT_ID, accountID); mNotificationService.cancelTrustRequestNotification(accountID); if (fContent instanceof ContactRequestsFragment) { - ((ContactRequestsFragment) fContent).presentForAccount(bundle); + ((ContactRequestsFragment) fContent).presentForAccount(accountID); return; } fContent = new ContactRequestsFragment(); @@ -486,17 +486,20 @@ public class HomeActivity extends AppCompatActivity implements BottomNavigationV @Override public boolean onNavigationItemSelected(@NonNull MenuItem item) { - Bundle bundle = new Bundle(); + Account account = mAccountService.getCurrentAccount(); + if (account == null) + return false; + Bundle bundle = new Bundle(); switch (item.getItemId()) { case R.id.navigation_requests: - bundle.putString(ContactRequestsFragment.ACCOUNT_ID, mAccountService.getCurrentAccount().getAccountID()); if (fContent instanceof ContactRequestsFragment) { - ((ContactRequestsFragment) fContent).presentForAccount(bundle); + ((ContactRequestsFragment) fContent).presentForAccount(account.getAccountID()); break; } popCustomBackStack(); fContent = new ContactRequestsFragment(); + bundle.putString(ContactRequestsFragment.ACCOUNT_ID, account.getAccountID()); fContent.setArguments(bundle); getSupportFragmentManager().beginTransaction() .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE) @@ -521,7 +524,6 @@ public class HomeActivity extends AppCompatActivity implements BottomNavigationV showToolbarSpinner(); break; case R.id.navigation_settings: - Account account = mAccountService.getCurrentAccount(); if (account.needsMigration()) { Log.d(TAG, "launchAccountMigrationActivity: Launch account migration activity"); diff --git a/ring-android/app/src/main/java/cx/ring/contactrequests/ContactRequestsFragment.java b/ring-android/app/src/main/java/cx/ring/contactrequests/ContactRequestsFragment.java index 85b71ba7e..415ccd568 100644 --- a/ring-android/app/src/main/java/cx/ring/contactrequests/ContactRequestsFragment.java +++ b/ring-android/app/src/main/java/cx/ring/contactrequests/ContactRequestsFragment.java @@ -75,14 +75,11 @@ public class ContactRequestsFragment extends BaseSupportFragment<ContactRequests binding = null; } - public void presentForAccount(Bundle bundle) { - if (bundle != null && bundle.containsKey(ACCOUNT_ID)) { - String accountId = bundle.getString(ACCOUNT_ID); - presenter.updateAccount(accountId); - Bundle arguments = getArguments(); - if (arguments != null) - arguments.putString(ACCOUNT_ID, accountId); - } + public void presentForAccount(@NonNull String accountId) { + presenter.updateAccount(accountId); + Bundle arguments = getArguments(); + if (arguments != null) + arguments.putString(ACCOUNT_ID, accountId); } @Override diff --git a/ring-android/app/src/main/java/cx/ring/fragments/ConversationFragment.java b/ring-android/app/src/main/java/cx/ring/fragments/ConversationFragment.java index 2c57c92cb..ce0dd800f 100644 --- a/ring-android/app/src/main/java/cx/ring/fragments/ConversationFragment.java +++ b/ring-android/app/src/main/java/cx/ring/fragments/ConversationFragment.java @@ -519,21 +519,19 @@ public class ConversationFragment extends BaseSupportFragment<ConversationPresen Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); if (takePictureIntent.resolveActivity(c.getPackageManager()) != null) { // Create the File where the photo should go - File photoFile; try { - photoFile = AndroidFileUtils.createImageFile(c); - } catch (IOException ex) { - Log.e(TAG, "takePicture: error creating temporary file", ex); - return; + File photoFile = AndroidFileUtils.createImageFile(c); + Log.i(TAG, "takePicture: trying to save to " + photoFile); + android.net.Uri photoURI = ContentUriHandler.getUriForFile(c, ContentUriHandler.AUTHORITY_FILES, photoFile); + takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI) + .putExtra("android.intent.extras.CAMERA_FACING", 1) + .putExtra("android.intent.extras.LENS_FACING_FRONT", 1) + .putExtra("android.intent.extra.USE_FRONT_CAMERA", true); + mCurrentPhoto = photoFile; + startActivityForResult(takePictureIntent, REQUEST_CODE_TAKE_PICTURE); + } catch (Exception e) { + Toast.makeText(c, "Error taking picture: " + e.getLocalizedMessage(), Toast.LENGTH_SHORT).show(); } - Log.i(TAG, "takePicture: trying to save to " + photoFile); - mCurrentPhoto = photoFile; - android.net.Uri photoURI = ContentUriHandler.getUriForFile(c, ContentUriHandler.AUTHORITY_FILES, photoFile); - takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI); - takePictureIntent.putExtra("android.intent.extras.CAMERA_FACING", 1); - takePictureIntent.putExtra("android.intent.extras.LENS_FACING_FRONT", 1); - takePictureIntent.putExtra("android.intent.extra.USE_FRONT_CAMERA", true); - startActivityForResult(takePictureIntent, REQUEST_CODE_TAKE_PICTURE); } } } diff --git a/ring-android/app/src/main/java/cx/ring/fragments/LocationSharingFragment.java b/ring-android/app/src/main/java/cx/ring/fragments/LocationSharingFragment.java index 958d22923..a1c4d17c0 100644 --- a/ring-android/app/src/main/java/cx/ring/fragments/LocationSharingFragment.java +++ b/ring-android/app/src/main/java/cx/ring/fragments/LocationSharingFragment.java @@ -263,8 +263,13 @@ public class LocationSharingFragment extends Fragment { public void onResume() { super.onResume(); mMap.onResume(); - if (overlay != null) - overlay.enableMyLocation(); + if (overlay != null) { + try { + overlay.enableMyLocation(); + } catch (Exception e) { + Log.w(TAG, e); + } + } } public void onPause(){ diff --git a/ring-android/app/src/main/java/cx/ring/mvp/BaseSupportFragment.java b/ring-android/app/src/main/java/cx/ring/mvp/BaseSupportFragment.java index 3a32c2106..d80166c81 100644 --- a/ring-android/app/src/main/java/cx/ring/mvp/BaseSupportFragment.java +++ b/ring-android/app/src/main/java/cx/ring/mvp/BaseSupportFragment.java @@ -29,7 +29,6 @@ import androidx.annotation.IdRes; import androidx.annotation.NonNull; import androidx.fragment.app.Fragment; import cx.ring.R; -import cx.ring.account.JamiAccountCreationFragment; import cx.ring.model.Error; public abstract class BaseSupportFragment<T extends RootPresenter> extends Fragment implements BaseView { @@ -86,16 +85,16 @@ public abstract class BaseSupportFragment<T extends RootPresenter> extends Fragm .beginTransaction() .setCustomAnimations(R.anim.slide_in_right, R.anim.slide_out_left, R.anim.slide_in_left, R.anim.slide_out_right) - .replace(content, fragment, JamiAccountCreationFragment.TAG) - .addToBackStack(JamiAccountCreationFragment.TAG) + .replace(content, fragment, TAG) + .addToBackStack(TAG) .commit(); } protected void replaceFragment(Fragment fragment, @IdRes int content) { getFragmentManager() .beginTransaction() - .replace(content, fragment, JamiAccountCreationFragment.TAG) - .addToBackStack(JamiAccountCreationFragment.TAG) + .replace(content, fragment, TAG) + .addToBackStack(TAG) .commit(); } } diff --git a/ring-android/app/src/main/java/cx/ring/tv/account/TVJamiLinkAccountFragment.java b/ring-android/app/src/main/java/cx/ring/tv/account/TVJamiLinkAccountFragment.java index 45d822c53..5c02f93b8 100644 --- a/ring-android/app/src/main/java/cx/ring/tv/account/TVJamiLinkAccountFragment.java +++ b/ring-android/app/src/main/java/cx/ring/tv/account/TVJamiLinkAccountFragment.java @@ -45,7 +45,7 @@ public class TVJamiLinkAccountFragment extends JamiGuidedStepFragment<JamiLinkAc public TVJamiLinkAccountFragment() { } - public static TVJamiLinkAccountFragment newInstance(AccountCreationModelImpl ringAccountViewModel) { + public static TVJamiLinkAccountFragment newInstance(@NonNull AccountCreationModelImpl ringAccountViewModel) { TVJamiLinkAccountFragment fragment = new TVJamiLinkAccountFragment(); fragment.model = ringAccountViewModel; return fragment; @@ -57,7 +57,7 @@ public class TVJamiLinkAccountFragment extends JamiGuidedStepFragment<JamiLinkAc super.onViewCreated(view, savedInstanceState); presenter.init(model); - if (model.getPhoto() != null) { + if (model != null && model.getPhoto() != null) { getGuidanceStylist().getIconView().setImageBitmap(model.getPhoto()); } } diff --git a/ring-android/app/src/main/java/cx/ring/tv/account/TVShareFragment.java b/ring-android/app/src/main/java/cx/ring/tv/account/TVShareFragment.java index 4c2972f79..889c0d76f 100644 --- a/ring-android/app/src/main/java/cx/ring/tv/account/TVShareFragment.java +++ b/ring-android/app/src/main/java/cx/ring/tv/account/TVShareFragment.java @@ -104,6 +104,6 @@ public class TVShareFragment extends BaseSupportFragment<SharePresenter> impleme .subscribe(a -> { binding.qrUserPhoto.setVisibility(View.VISIBLE); binding.qrUserPhoto.setImageDrawable(a); - }, e-> Log.e(TAG, e.getMessage()))); + }, e-> Log.e(TVShareFragment.class.getSimpleName(), e.getMessage()))); } } 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 b2fa171d9..20d5f45c6 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 @@ -34,6 +34,7 @@ import android.os.Bundle; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.app.AlertDialog; +import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import androidx.transition.TransitionManager; @@ -89,6 +90,7 @@ import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.CompositeDisposable; public class TvConversationFragment extends BaseSupportFragment<ConversationPresenter> implements ConversationView { + private static final String TAG = TvConversationFragment.class.getSimpleName(); private static final String ARG_MODEL = "model"; @@ -111,15 +113,13 @@ public class TvConversationFragment extends BaseSupportFragment<ConversationPres private int mSelectedPosition; - private static final String LOG_TAG = "AudioRecordTest"; private static final int REQUEST_RECORD_AUDIO_PERMISSION = 200; private static File fileName = null; private MediaRecorder recorder = null; private MediaPlayer player = null; - private boolean permissionToRecordAccepted = false; - private String[] permissions = {Manifest.permission.RECORD_AUDIO}; + private String[] permissions = { Manifest.permission.RECORD_AUDIO }; boolean mStartRecording = true; boolean mStartPlaying = true; @@ -145,7 +145,6 @@ public class TvConversationFragment extends BaseSupportFragment<ConversationPres if (getArguments() != null) { mTvListViewModel = getArguments().getParcelable(ARG_MODEL); } - requestPermissions(permissions, REQUEST_RECORD_AUDIO_PERMISSION); } @Nullable @@ -164,9 +163,11 @@ public class TvConversationFragment extends BaseSupportFragment<ConversationPres // Create an intent that can start the Speech Recognizer activity private void displaySpeechRecognizer() { - Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); - intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); - intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "Say something..."); + if (!checkAudioPermission()) + return; + Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH) + .putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM) + .putExtra(RecognizerIntent.EXTRA_PROMPT, getText(R.string.conversation_input_speech_hint)); startActivityForResult(intent, REQUEST_SPEECH_CODE); } @@ -239,6 +240,14 @@ public class TvConversationFragment extends BaseSupportFragment<ConversationPres mRecyclerView.setAdapter(mAdapter); } + private boolean checkAudioPermission() { + if (ContextCompat.checkSelfPermission(requireContext(), Manifest.permission.RECORD_AUDIO) != PackageManager.PERMISSION_GRANTED) { + requestPermissions(permissions, REQUEST_RECORD_AUDIO_PERMISSION); + return false; + } + return true; + } + @Override public boolean onContextItemSelected(@NonNull MenuItem item) { if (mAdapter.onContextItemSelected(item)) @@ -248,7 +257,6 @@ public class TvConversationFragment extends BaseSupportFragment<ConversationPres @Override public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { - super.onActivityResult(requestCode, resultCode, data); switch (requestCode) { case REQUEST_CODE_PHOTO: if (resultCode == Activity.RESULT_OK && data != null) { @@ -465,13 +473,9 @@ public class TvConversationFragment extends BaseSupportFragment<ConversationPres @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); - switch (requestCode) { - case REQUEST_RECORD_AUDIO_PERMISSION: - permissionToRecordAccepted = grantResults[0] == PackageManager.PERMISSION_GRANTED; - break; + if (requestCode == REQUEST_RECORD_AUDIO_PERMISSION) { + // NOOP } - if (!permissionToRecordAccepted) getActivity().finish(); - } private void onRecord(boolean start) { @@ -497,7 +501,7 @@ public class TvConversationFragment extends BaseSupportFragment<ConversationPres player.prepare(); player.start(); } catch (IOException e) { - Log.e(LOG_TAG, "prepare() failed"); + Log.e(TAG, "prepare() failed"); } } @@ -507,6 +511,8 @@ public class TvConversationFragment extends BaseSupportFragment<ConversationPres } private void startRecording() { + if (!checkAudioPermission()) + return; if (recorder != null) { return; } diff --git a/ring-android/app/src/main/java/cx/ring/utils/ContentUriHandler.java b/ring-android/app/src/main/java/cx/ring/utils/ContentUriHandler.java index 8272aecd9..a02c6c250 100644 --- a/ring-android/app/src/main/java/cx/ring/utils/ContentUriHandler.java +++ b/ring-android/app/src/main/java/cx/ring/utils/ContentUriHandler.java @@ -58,7 +58,6 @@ public class ContentUriHandler { public static Uri getUriForFile(@NonNull Context context, @NonNull String authority, @NonNull File file) { if (HUAWEI_MANUFACTURER.equalsIgnoreCase(Build.MANUFACTURER)) { - Log.w(TAG, "Using a Huawei device Increased likelihood of failure..."); try { return FileProvider.getUriForFile(context, authority, file); } catch (IllegalArgumentException e) { diff --git a/ring-android/app/src/main/res/values/strings.xml b/ring-android/app/src/main/res/values/strings.xml index 81d917ccb..68c0be48f 100644 --- a/ring-android/app/src/main/res/values/strings.xml +++ b/ring-android/app/src/main/res/values/strings.xml @@ -330,9 +330,10 @@ along with this program; if not, write to the Free Software <string name="tv_audio_play">Play</string> <string name="tv_audio_pause">Pause</string> <string name="tv_dialog_send">Send</string> - <string name="tv_audio_recording">Recording...</string> + <string name="tv_audio_recording">Recording…</string> <string name="tv_send_text">Send Text</string> <string name="tv_send_audio">Send Audio</string> <string name="tv_send_video">Send Media</string> + <string name="conversation_input_speech_hint">Say something…</string> </resources> -- GitLab