show help button on certain error conditions in RTP session. fixes #3770
This commit is contained in:
		
							parent
							
								
									644ad99520
								
							
						
					
					
						commit
						b7f3b4333e
					
				|  | @ -0,0 +1,11 @@ | |||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| 
 | ||||
| <menu xmlns:android="http://schemas.android.com/apk/res/android" | ||||
|       xmlns:app="http://schemas.android.com/apk/res-auto"> | ||||
| 
 | ||||
|     <item | ||||
|         android:id="@+id/action_help" | ||||
|         android:icon="?attr/icon_help" | ||||
|         android:title="@string/help" | ||||
|         app:showAsAction="always"/> | ||||
| </menu> | ||||
|  | @ -1,6 +1,7 @@ | |||
| package eu.siacs.conversations; | ||||
| 
 | ||||
| import android.graphics.Bitmap; | ||||
| import android.net.Uri; | ||||
| 
 | ||||
| import java.util.Collections; | ||||
| import java.util.List; | ||||
|  | @ -35,6 +36,7 @@ public final class Config { | |||
|     public static final String LOGTAG = BuildConfig.LOGTAG; | ||||
| 
 | ||||
|     public static final Jid BUG_REPORTS = Jid.of("bugs@conversations.im"); | ||||
|     public static final Uri HELP = Uri.parse("https://help.conversations.im"); | ||||
| 
 | ||||
| 
 | ||||
|     public static final String DOMAIN_LOCK = null; //only allow account creation for this domain | ||||
|  |  | |||
|  | @ -3,6 +3,7 @@ package eu.siacs.conversations.ui; | |||
| import android.Manifest; | ||||
| import android.annotation.SuppressLint; | ||||
| import android.app.PictureInPictureParams; | ||||
| import android.content.ActivityNotFoundException; | ||||
| import android.content.Context; | ||||
| import android.content.Intent; | ||||
| import android.content.pm.PackageManager; | ||||
|  | @ -17,6 +18,8 @@ import android.support.annotation.RequiresApi; | |||
| import android.support.annotation.StringRes; | ||||
| import android.util.Log; | ||||
| import android.util.Rational; | ||||
| import android.view.Menu; | ||||
| import android.view.MenuItem; | ||||
| import android.view.View; | ||||
| import android.view.WindowManager; | ||||
| import android.widget.Toast; | ||||
|  | @ -81,6 +84,10 @@ public class RtpSessionActivity extends XmppActivity implements XmppConnectionSe | |||
|             RtpEndUserState.CONNECTIVITY_LOST_ERROR, | ||||
|             RtpEndUserState.RETRACTED | ||||
|     ); | ||||
|     private static final List<RtpEndUserState> STATES_SHOWING_HELP_BUTTON = Arrays.asList( | ||||
|             RtpEndUserState.APPLICATION_ERROR, | ||||
|             RtpEndUserState.CONNECTIVITY_ERROR | ||||
|     ); | ||||
|     private static final String PROXIMITY_WAKE_LOCK_TAG = "conversations:in-rtp-session"; | ||||
|     private static final int REQUEST_ACCEPT_CALL = 0x1111; | ||||
|     private WeakReference<JingleRtpConnection> rtpConnectionReference; | ||||
|  | @ -124,6 +131,45 @@ public class RtpSessionActivity extends XmppActivity implements XmppConnectionSe | |||
|         setSupportActionBar(binding.toolbar); | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public boolean onCreateOptionsMenu(final Menu menu) { | ||||
|         getMenuInflater().inflate(R.menu.activity_rtp_session, menu); | ||||
|         final MenuItem help = menu.findItem(R.id.action_help); | ||||
|         help.setVisible(isHelpButtonVisible()); | ||||
|         return super.onCreateOptionsMenu(menu); | ||||
|     } | ||||
| 
 | ||||
|     private boolean isHelpButtonVisible() { | ||||
|         try { | ||||
|             return STATES_SHOWING_HELP_BUTTON.contains(requireRtpConnection().getEndUserState()); | ||||
|         } catch (IllegalStateException e) { | ||||
|             final Intent intent = getIntent(); | ||||
|             final String state = intent != null ? intent.getStringExtra(EXTRA_LAST_REPORTED_STATE) : null; | ||||
|             if (state != null) { | ||||
|                 return STATES_SHOWING_HELP_BUTTON.contains(RtpEndUserState.valueOf(state)); | ||||
|             } else { | ||||
|                 return false; | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     public boolean onOptionsItemSelected(final MenuItem item) { | ||||
|         if (item.getItemId() == R.id.action_help) { | ||||
|             launchHelpInBrowser(); | ||||
|             return true; | ||||
|         } | ||||
|         return super.onOptionsItemSelected(item); | ||||
|     } | ||||
| 
 | ||||
|     private void launchHelpInBrowser() { | ||||
|         final Intent intent = new Intent(Intent.ACTION_VIEW, Config.HELP); | ||||
|         try { | ||||
|             startActivity(intent); | ||||
|         } catch (final ActivityNotFoundException e) { | ||||
|             Toast.makeText(this, R.string.no_application_found_to_open_link, Toast.LENGTH_LONG).show(); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     private void endCall(View view) { | ||||
|         endCall(); | ||||
|     } | ||||
|  | @ -302,6 +348,7 @@ public class RtpSessionActivity extends XmppActivity implements XmppConnectionSe | |||
|                 updateButtonConfiguration(state); | ||||
|                 updateStateDisplay(state); | ||||
|                 updateProfilePicture(state); | ||||
|                 invalidateOptionsMenu(); | ||||
|             } | ||||
|             binding.with.setText(account.getRoster().getContact(with).getDisplayName()); | ||||
|         } | ||||
|  | @ -456,11 +503,12 @@ public class RtpSessionActivity extends XmppActivity implements XmppConnectionSe | |||
|         updateStateDisplay(currentState, media); | ||||
|         updateButtonConfiguration(currentState, media); | ||||
|         updateProfilePicture(currentState); | ||||
|         invalidateOptionsMenu(); | ||||
|         return false; | ||||
|     } | ||||
| 
 | ||||
|     private void initializeWithTerminatedSessionState(final Account account, final Jid with, final JingleConnectionManager.TerminatedRtpSession terminatedRtpSession) { | ||||
|         Log.d(Config.LOGTAG,"initializeWithTerminatedSessionState()"); | ||||
|         Log.d(Config.LOGTAG, "initializeWithTerminatedSessionState()"); | ||||
|         if (terminatedRtpSession.state == RtpEndUserState.ENDED) { | ||||
|             finish(); | ||||
|             return; | ||||
|  | @ -470,6 +518,8 @@ public class RtpSessionActivity extends XmppActivity implements XmppConnectionSe | |||
|         updateButtonConfiguration(state); | ||||
|         updateStateDisplay(state); | ||||
|         updateProfilePicture(state); | ||||
|         updateCallDuration(); | ||||
|         invalidateOptionsMenu(); | ||||
|         binding.with.setText(account.getRoster().getContact(with).getDisplayName()); | ||||
|     } | ||||
| 
 | ||||
|  | @ -956,6 +1006,7 @@ public class RtpSessionActivity extends XmppActivity implements XmppConnectionSe | |||
|                 updateButtonConfiguration(state, media); | ||||
|                 updateVideoViews(state); | ||||
|                 updateProfilePicture(state, contact); | ||||
|                 invalidateOptionsMenu(); | ||||
|             }); | ||||
|             if (END_CARD.contains(state)) { | ||||
|                 final JingleRtpConnection rtpConnection = requireRtpConnection(); | ||||
|  | @ -1004,6 +1055,7 @@ public class RtpSessionActivity extends XmppActivity implements XmppConnectionSe | |||
|                 updateStateDisplay(state); | ||||
|                 updateButtonConfiguration(state); | ||||
|                 updateProfilePicture(state); | ||||
|                 invalidateOptionsMenu(); | ||||
|             }); | ||||
|             resetIntent(account, with, state, actionToMedia(currentIntent.getAction())); | ||||
|         } | ||||
|  |  | |||
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 476 B | 
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 304 B | 
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 585 B | 
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 842 B | 
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 1.1 KiB | 
|  | @ -96,6 +96,7 @@ | |||
|     <attr name="icon_refresh" format="reference" /> | ||||
|     <attr name="icon_remove" format="reference" /> | ||||
|     <attr name="icon_search" format="reference" /> | ||||
|     <attr name="icon_help" format="reference" /> | ||||
|     <attr name="icon_secure" format="reference" /> | ||||
|     <attr name="icon_settings" format="reference" /> | ||||
|     <attr name="icon_share" format="reference" /> | ||||
|  |  | |||
|  | @ -917,6 +917,7 @@ | |||
|     <string name="missed_call">Missed call</string> | ||||
|     <string name="audio_call">Audio call</string> | ||||
|     <string name="video_call">Video call</string> | ||||
|     <string name="help">Help</string> | ||||
|     <string name="microphone_unavailable">Your microphone is unavailable</string> | ||||
|     <string name="only_one_call_at_a_time">You can only have one call at a time.</string> | ||||
|     <string name="return_to_ongoing_call">Return to ongoing call</string> | ||||
|  |  | |||
|  | @ -114,6 +114,7 @@ | |||
|         </item> | ||||
|         <item name="icon_remove" type="reference">@drawable/ic_delete_black_24dp</item> | ||||
|         <item name="icon_search" type="reference">@drawable/ic_search_white_24dp</item> | ||||
|         <item name="icon_help" type="reference">@drawable/ic_help_white_24dp</item> | ||||
|         <item name="icon_secure" type="reference">@drawable/ic_lock_open_white_24dp</item> | ||||
|         <item name="icon_settings" type="reference">@drawable/ic_settings_black_24dp</item> | ||||
|         <item name="icon_share" type="reference">@drawable/ic_share_white_24dp</item> | ||||
|  | @ -267,6 +268,7 @@ | |||
|         </item> | ||||
|         <item name="icon_remove" type="reference">@drawable/ic_delete_white_24dp</item> | ||||
|         <item name="icon_search" type="reference">@drawable/ic_search_white_24dp</item> | ||||
|         <item name="icon_help" type="reference">@drawable/ic_help_white_24dp</item> | ||||
|         <item name="icon_secure" type="reference">@drawable/ic_lock_open_white_24dp</item> | ||||
|         <item name="icon_settings" type="reference">@drawable/ic_settings_white_24dp</item> | ||||
|         <item name="icon_share" type="reference">@drawable/ic_share_white_24dp</item> | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 Daniel Gultsch
						Daniel Gultsch