From 583855cecac32fa52e01b804d43d937926e6fd31 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Fri, 3 Aug 2012 11:22:51 +0200 Subject: [PATCH] Wifi only fixed + call transfer --- res/drawable-hdpi/transfer_call_default.png | Bin 0 -> 5399 bytes res/drawable-hdpi/transfer_call_disabled.png | Bin 0 -> 5245 bytes res/drawable-hdpi/transfer_call_over.png | Bin 0 -> 5390 bytes res/drawable-mdpi/transfer_call_default.png | Bin 0 -> 3597 bytes res/drawable-mdpi/transfer_call_disabled.png | Bin 0 -> 3019 bytes res/drawable-mdpi/transfer_call_over.png | Bin 0 -> 3454 bytes res/drawable/{plus.xml => add_call.xml} | 0 res/drawable/transfer_call.xml | 9 + res/layout/dialer.xml | 1 + res/values/strings.xml | 302 ++++++++++--------- src/org/linphone/DialerFragment.java | 42 ++- src/org/linphone/InCallActivity.java | 17 +- src/org/linphone/LinphoneActivity.java | 13 +- src/org/linphone/LinphoneManager.java | 32 +- src/org/linphone/NetworkManager.java | 32 +- src/org/linphone/StatusFragment.java | 7 +- src/org/linphone/VideoCallFragment.java | 2 +- src/org/linphone/ui/CallButton.java | 16 +- 18 files changed, 245 insertions(+), 228 deletions(-) create mode 100644 res/drawable-hdpi/transfer_call_default.png create mode 100644 res/drawable-hdpi/transfer_call_disabled.png create mode 100644 res/drawable-hdpi/transfer_call_over.png create mode 100644 res/drawable-mdpi/transfer_call_default.png create mode 100644 res/drawable-mdpi/transfer_call_disabled.png create mode 100644 res/drawable-mdpi/transfer_call_over.png rename res/drawable/{plus.xml => add_call.xml} (100%) create mode 100644 res/drawable/transfer_call.xml diff --git a/res/drawable-hdpi/transfer_call_default.png b/res/drawable-hdpi/transfer_call_default.png new file mode 100644 index 0000000000000000000000000000000000000000..b67e4509ea16cb4a3161b07b7811e11148aa44fd GIT binary patch literal 5399 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 Q`KwY}{hnGq%r5f30AzHA?EnA( literal 0 HcmV?d00001 diff --git a/res/drawable-hdpi/transfer_call_disabled.png b/res/drawable-hdpi/transfer_call_disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..0307f6bf8f3b2c7032532d890c0de61b86bf07f5 GIT binary patch literal 5245 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 literal 0 HcmV?d00001 diff --git a/res/drawable-hdpi/transfer_call_over.png b/res/drawable-hdpi/transfer_call_over.png new file mode 100644 index 0000000000000000000000000000000000000000..9f3e9ac36165bda7da5ecb5a17b069716fd378c3 GIT binary patch literal 5390 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 literal 0 HcmV?d00001 diff --git a/res/drawable-mdpi/transfer_call_over.png b/res/drawable-mdpi/transfer_call_over.png new file mode 100644 index 0000000000000000000000000000000000000000..dac92025a08825eb0b568ce8236865ac5bb29fe4 GIT binary patch literal 3454 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 + + + + + diff --git a/res/layout/dialer.xml b/res/layout/dialer.xml index 2b620844e..e3afe8c62 100644 --- a/res/layout/dialer.xml +++ b/res/layout/dialer.xml @@ -13,6 +13,7 @@ android:textSize="22dp" android:background="@drawable/dialer_address_background" android:inputType="textEmailAddress" + android:hint="@string/addressHint" android:paddingLeft="20dp" android:paddingRight="20dp" android:layout_weight="0.4" diff --git a/res/values/strings.xml b/res/values/strings.xml index 9e18302af..5a8a8bcde 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -166,153 +166,157 @@ g729 Codecs Place a call -Debug -Report issue -Describe problem here -Error generating bug report -Logs not found. -Reading logs, may takes time... -Send bug report with... -About -Audio -Exit -Prefix -Advanced -Settings -Proxy -Domain* -Password* -Username* -Hello World, Linphone! -SIP Account -wrong user name -wrong password -Wrong domain -Wrong settings -Dialer -Contact -Cannot call %s -Yes -No -Dismiss -Continue -Never remind me -%s, do you want to go to the settings page ? -<P ALIGN=CENTER>No SIP account has been configured yet, do you want to go to the settings page ?<br/><br/> Need help ?<br/> "http://www.linphone.org/m/help"</p> -<P ALIGN=CENTER>Welcome to Linphone SIP phone<br/><br/> If you are new to SIP, have a look at<br/> "http://www.linphone.org/m/help"</p> -Starting echo cancelation audio calibration -Cannot initiate a new call because a call is already engaged -History -Cannot build destination address from [%s] -Clear -Cannot get call parameters -Cannot create default call parameters -Cannot invite destination address [%s] - -started -Removes the echo heard by other end (not recommended) -Removes the echo heard by other end (brute force method) -Stun server -Calibrating... -Calibrated [%s ms] -failed -Enter your username and password to connect to the service. -Username -Password -Connect -Please enter your login and password -Couldn\'t connect; check your login and password and start again - -AMR codec might not be present on your phone -VP8 -Media encryption -None -SRTP -ZRTP - -Your correspondent would like to switch to video -Accept video -Deny video - -pref_nb_accounts_extra -pref_default_account -SIP Accounts - -Use wifi only - -An error occurred, try again later. -Server unreachable, verify your internet connection. -This username is already in use. -Your username is not valid. -Your email is not valid. -Your password is not valid (6 characters min). -Passwords entered are different. - -SIP proxy hostname or ip address (optional) -Route all calls through SIP proxy -Example: john if your account is john@sip.linphone.org -sip.linphone.org if your account is john@sip.linphone.org - -Delete -Chat -Call -Add to contacts -CONNECTED -NOT CONNECTED -CONNECTING -ERROR - - -Add to contacts button - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Account Setup Assistant -This assistant will help you to use a SIP account for your calls. -Create an account on linphone.org -I already have a linphone.org account -I already have a SIP account -Enter your linphone.org username and password -Apply -username -password -domain -confirm password -email -Create Account -An email has been sent to the address you gave. In order to activate your account, you need to click on the link inside it. Once it is done, come back here and click on the button above. -Check -Your account has not been validated yet. -Your account has been validated. + + Debug + Report issue + Describe problem here + Error generating bug report + Logs not found. + Reading logs, may takes time... + Send bug report with... + About + Audio + Exit + Prefix + Advanced + Settings + Proxy + Domain* + Password* + Username* + Hello World, Linphone! + SIP Account + wrong user name + wrong password + Wrong domain + Wrong settings + Dialer + Contact + Cannot call %s + Yes + No + Dismiss + Continue + Never remind me + %s, do you want to go to the settings page ? + <P ALIGN=CENTER>No SIP account has been configured yet, do you want to go to the settings page ?<br/><br/> Need help ?<br/> "http://www.linphone.org/m/help"</p> + <P ALIGN=CENTER>Welcome to Linphone SIP phone<br/><br/> If you are new to SIP, have a look at<br/> "http://www.linphone.org/m/help"</p> + Starting echo cancelation audio calibration + Cannot initiate a new call because a call is already engaged + History + Cannot build destination address from [%s] + Clear + Cannot get call parameters + Cannot create default call parameters + Cannot invite destination address [%s] + + started + Removes the echo heard by other end (not recommended) + Removes the echo heard by other end (brute force method) + Stun server + Calibrating... + Calibrated [%s ms] + failed + Enter your username and password to connect to the service. + Username + Password + Connect + Please enter your login and password + Couldn\'t connect; check your login and password and start again + + AMR codec might not be present on your phone + VP8 + Media encryption + None + SRTP + ZRTP + + Your correspondent would like to switch to video + Accept video + Deny video + + pref_nb_accounts_extra + pref_default_account + SIP Accounts + + Use wifi only + + An error occurred, try again later. + Server unreachable, verify your internet connection. + This username is already in use. + Your username is not valid. + Your email is not valid. + Your password is not valid (6 characters min). + Passwords entered are different. + + SIP proxy hostname or ip address (optional) + Route all calls through SIP proxy + Example: john if your account is john@sip.linphone.org + sip.linphone.org if your account is john@sip.linphone.org + + Delete + Chat + Call + Add to contacts + CONNECTED + NOT CONNECTED + CONNECTING + ERROR + + Number or adress + + + Add to contacts button + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Account Setup Assistant + This assistant will help you to use a SIP account for your calls. + Create an account on linphone.org + I already have a linphone.org account + I already have a SIP account + Enter your linphone.org username and password + Apply + username + password + domain + confirm password + email + Create Account + An email has been sent to the address you gave. In order to activate your account, you need to click on the link inside it. Once it is done, come back here and click on the button above. + Check + Your account has not been validated yet. + Your account has been validated. + diff --git a/src/org/linphone/DialerFragment.java b/src/org/linphone/DialerFragment.java index 1e7e4be96..05ae80e69 100644 --- a/src/org/linphone/DialerFragment.java +++ b/src/org/linphone/DialerFragment.java @@ -18,6 +18,7 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ import org.linphone.compatibility.Compatibility; +import org.linphone.core.LinphoneCore; import org.linphone.ui.AddressAware; import org.linphone.ui.AddressText; import org.linphone.ui.CallButton; @@ -39,11 +40,13 @@ import android.widget.ImageView; */ public class DialerFragment extends Fragment { private static DialerFragment instance; + private static boolean isCallTransferOngoing = false; + public boolean mVisible; private AddressText mAddress; private CallButton mCall; private ImageView mAddContact; - private OnClickListener addContactListener, cancelListener; + private OnClickListener addContactListener, cancelListener, transferListener; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, @@ -59,7 +62,11 @@ public class DialerFragment extends Fragment { mCall = (CallButton) view.findViewById(R.id.Call); mCall.setAddressWidget(mAddress); if (LinphoneActivity.isInstanciated() && LinphoneManager.getLc().getCallsNb() > 0) { - mCall.setImageResource(R.drawable.plus); + if (isCallTransferOngoing) { + mCall.setImageResource(R.drawable.transfer_call); + } else { + mCall.setImageResource(R.drawable.add_call); + } } else { mCall.setImageResource(R.drawable.call); } @@ -69,6 +76,7 @@ public class DialerFragment extends Fragment { numpad.setAddressWidget(mAddress); mAddContact = (ImageView) view.findViewById(R.id.addContact); + addContactListener = new OnClickListener() { @Override public void onClick(View v) { @@ -82,8 +90,21 @@ public class DialerFragment extends Fragment { LinphoneActivity.instance().resetClassicMenuLayoutAndGoBackToCallIfStillRunning(); } }; + transferListener = new OnClickListener() { + @Override + public void onClick(View v) { + LinphoneCore lc = LinphoneManager.getLc(); + if (lc.getCurrentCall() == null) { + return; + } + lc.transferCall(lc.getCurrentCall(), mAddress.getText().toString()); + isCallTransferOngoing = false; + LinphoneActivity.instance().resetClassicMenuLayoutAndGoBackToCallIfStillRunning(); + } + }; + mAddContact.setEnabled(!(LinphoneActivity.isInstanciated() && LinphoneManager.getLc().getCallsNb() > 0)); - resetLayout(); + resetLayout(isCallTransferOngoing); if (getArguments() != null) { String number = getArguments().getString("SipUri"); @@ -123,17 +144,24 @@ public class DialerFragment extends Fragment { LinphoneActivity.instance().selectMenu(FragmentsAvailable.DIALER); LinphoneActivity.instance().updateDialerFragment(this); } - resetLayout(); + resetLayout(isCallTransferOngoing); } - public void resetLayout() { + public void resetLayout(boolean callTransfer) { + isCallTransferOngoing = callTransfer; if (LinphoneManager.getLc() != null && LinphoneManager.getLc().getCallsNb() > 0) { - mCall.setImageResource(R.drawable.plus); - mAddress.setText(""); + if (isCallTransferOngoing) { + mCall.setImageResource(R.drawable.transfer_call); + mCall.setExternalClickListener(transferListener); + } else { + mCall.setImageResource(R.drawable.add_call); + mCall.resetClickListener(); + } mAddContact.setEnabled(true); mAddContact.setImageResource(R.drawable.cancel); mAddContact.setOnClickListener(cancelListener); } else { + mAddress.setText(""); mCall.setImageResource(R.drawable.call); mAddContact.setEnabled(true); mAddContact.setImageResource(R.drawable.add_contact); diff --git a/src/org/linphone/InCallActivity.java b/src/org/linphone/InCallActivity.java index 0333034a2..5bbb7a512 100644 --- a/src/org/linphone/InCallActivity.java +++ b/src/org/linphone/InCallActivity.java @@ -30,6 +30,7 @@ import org.linphone.mediastream.video.capture.hwconf.AndroidCameraConfiguration; import org.linphone.ui.Numpad; import android.app.Activity; +import android.content.Intent; import android.content.SharedPreferences; import android.os.Bundle; import android.os.Handler; @@ -242,7 +243,7 @@ public class InCallActivity extends FragmentActivity implements } } else if (id == R.id.transfer) { - //TODO Call Transfer + goBackToDialerAndDisplayTransferButton(); } else if (id == R.id.options) { hideOrDisplayCallOptions(); @@ -579,11 +580,21 @@ public class InCallActivity extends FragmentActivity implements } addCall.startAnimation(anim); } + transfer.setEnabled(LinphoneManager.getLc().getCurrentCall() != null); } } public void goBackToDialer() { - setResult(Activity.RESULT_FIRST_USER); + Intent intent = new Intent(); + intent.putExtra("Transfer", false); + setResult(Activity.RESULT_FIRST_USER, intent); + finish(); + } + + private void goBackToDialerAndDisplayTransferButton() { + Intent intent = new Intent(); + intent.putExtra("Transfer", true); + setResult(Activity.RESULT_FIRST_USER, intent); finish(); } @@ -614,6 +625,8 @@ public class InCallActivity extends FragmentActivity implements } }); } + + transfer.setEnabled(LinphoneManager.getLc().getCurrentCall() != null); } @Override diff --git a/src/org/linphone/LinphoneActivity.java b/src/org/linphone/LinphoneActivity.java index 815fb1d7b..ce4f6f37b 100644 --- a/src/org/linphone/LinphoneActivity.java +++ b/src/org/linphone/LinphoneActivity.java @@ -595,7 +595,9 @@ public class LinphoneActivity extends FragmentActivity implements OnClickListene AddressType address = new AddressText(this, null); address.setDisplayedName(name); address.setText(number); - LinphoneManager.getInstance().newOutgoingCall(address); + if (LinphoneManager.getLc().getCallsNb() == 0) { + LinphoneManager.getInstance().newOutgoingCall(address); + } } public void setAddressAndGoToDialer(String number) { @@ -726,10 +728,10 @@ public class LinphoneActivity extends FragmentActivity implements OnClickListene contactsHandler.start(); } - private void initInCallMenuLayout() { + private void initInCallMenuLayout(boolean callTransfer) { selectMenu(FragmentsAvailable.DIALER); if (dialerFragment != null) { - ((DialerFragment) dialerFragment).resetLayout(); + ((DialerFragment) dialerFragment).resetLayout(callTransfer); } } @@ -738,7 +740,7 @@ public class LinphoneActivity extends FragmentActivity implements OnClickListene @Override public void run() { if (dialerFragment != null) { - ((DialerFragment) dialerFragment).resetLayout(); + ((DialerFragment) dialerFragment).resetLayout(false); } if (LinphoneManager.getLc().getCallsNb() > 0) { @@ -781,8 +783,9 @@ public class LinphoneActivity extends FragmentActivity implements OnClickListene } } else if (requestCode == callActivity) { + boolean callTransfer = data == null ? false : data.getBooleanExtra("Transfer", false); if (LinphoneManager.getLc().getCallsNb() > 0) { - initInCallMenuLayout(); + initInCallMenuLayout(callTransfer); } else { resetClassicMenuLayoutAndGoBackToCallIfStillRunning(); } diff --git a/src/org/linphone/LinphoneManager.java b/src/org/linphone/LinphoneManager.java index d68b7eb4c..d3eb9802c 100644 --- a/src/org/linphone/LinphoneManager.java +++ b/src/org/linphone/LinphoneManager.java @@ -692,7 +692,13 @@ public final class LinphoneManager implements LinphoneCoreListener { //init network state NetworkInfo networkInfo = mConnectivityManager.getActiveNetworkInfo(); - mLc.setNetworkReachable(networkInfo !=null? networkInfo.getState() == NetworkInfo.State.CONNECTED:false); + SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(mServiceContext); + boolean wifiOnly = pref.getBoolean(getString(R.string.pref_wifi_only_key), false); + boolean isConnected = false; + if (networkInfo != null) { + isConnected = networkInfo.getState() == NetworkInfo.State.CONNECTED && (networkInfo.getTypeName().equals("WIFI") || (networkInfo.getTypeName().equals("mobile") && !wifiOnly)); + } + mLc.setNetworkReachable(isConnected); } catch (LinphoneCoreException e) { throw new LinphoneConfigException(getString(R.string.wrong_settings),e); } @@ -820,14 +826,14 @@ public final class LinphoneManager implements LinphoneCoreListener { I/Linphone( 8397): Managing tunnel I/Linphone( 8397): WIFI connected: setting network reachable */ - public void connectivityChanged(NetworkInfo eventInfo, ConnectivityManager cm) { - NetworkInfo activeInfo = cm.getActiveNetworkInfo(); + public void connectivityChanged(ConnectivityManager cm, boolean noConnectivity) { + NetworkInfo eventInfo = cm.getActiveNetworkInfo(); - if (eventInfo.getState() == NetworkInfo.State.DISCONNECTED) { - Log.i(eventInfo.getTypeName()," disconnected: setting network unreachable"); + if (noConnectivity || eventInfo == null || eventInfo.getState() == NetworkInfo.State.DISCONNECTED) { + Log.i("No connectivity: setting network unreachable"); mLc.setNetworkReachable(false); } else if (eventInfo.getState() == NetworkInfo.State.CONNECTED){ - manageTunnelServer(activeInfo); + manageTunnelServer(eventInfo); SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(mServiceContext); boolean wifiOnly = pref.getBoolean(getString(R.string.pref_wifi_only_key), false); if (eventInfo.getTypeName().equals("WIFI") || (eventInfo.getTypeName().equals("mobile") && !wifiOnly)) { @@ -840,20 +846,6 @@ public final class LinphoneManager implements LinphoneCoreListener { } } - - - - - - - - - - - - - - public interface EcCalibrationListener { void onEcCalibrationStatus(EcCalibratorStatus status, int delayMs); } diff --git a/src/org/linphone/NetworkManager.java b/src/org/linphone/NetworkManager.java index ac2fb0c39..652f2c970 100644 --- a/src/org/linphone/NetworkManager.java +++ b/src/org/linphone/NetworkManager.java @@ -18,15 +18,10 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ package org.linphone; -import org.linphone.core.Log; - import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; -import android.content.SharedPreferences; import android.net.ConnectivityManager; -import android.net.NetworkInfo; -import android.preference.PreferenceManager; @@ -39,34 +34,9 @@ public class NetworkManager extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { - ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); - NetworkInfo lNetworkInfo = cm.getActiveNetworkInfo(); - Log.i("Network info [",lNetworkInfo,"]"); Boolean lNoConnectivity = intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY,false); - - - if (!LinphoneService.isReady()) { - Log.i("Network broadcast received while Linphone service not ready"); - return; - } - - - if (lNoConnectivity | ((lNetworkInfo.getState() == NetworkInfo.State.DISCONNECTED) /*&& !lIsFailOver*/)) { - LinphoneManager.getLc().setNetworkReachable(false); - } else if (lNetworkInfo.getState() == NetworkInfo.State.CONNECTED){ - SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(context); - boolean wifiOnly = pref.getBoolean(context.getString(R.string.pref_wifi_only_key), false); - if (lNetworkInfo.getTypeName().equals("WIFI") || (lNetworkInfo.getTypeName().equals("mobile") && !wifiOnly)) { - LinphoneManager.getLc().setNetworkReachable(true); - } else { - LinphoneManager.getLc().setNetworkReachable(false); - } - } else { - // Other unhandled events - } - - LinphoneManager.getInstance().connectivityChanged(lNetworkInfo, cm); + LinphoneManager.getInstance().connectivityChanged(cm, lNoConnectivity); } } diff --git a/src/org/linphone/StatusFragment.java b/src/org/linphone/StatusFragment.java index 0607a99c4..3f0599b40 100644 --- a/src/org/linphone/StatusFragment.java +++ b/src/org/linphone/StatusFragment.java @@ -342,8 +342,11 @@ public class StatusFragment extends Fragment { checkBox.setChecked(true); checkBox.setEnabled(false); - LinphoneManager.getLc().setDefaultProxyConfig(accounts[selectedPosition]); - LinphoneManager.getLc().refreshRegisters(); + LinphoneCore lc = LinphoneManager.getLc(); + lc.setDefaultProxyConfig(accounts[selectedPosition]); + if (lc.isNetworkReachable()) { + lc.refreshRegisters(); + } } } }; diff --git a/src/org/linphone/VideoCallFragment.java b/src/org/linphone/VideoCallFragment.java index 9b8f30fb5..5e1d10400 100644 --- a/src/org/linphone/VideoCallFragment.java +++ b/src/org/linphone/VideoCallFragment.java @@ -49,7 +49,7 @@ public class VideoCallFragment extends Fragment implements OnGestureListener, On private AndroidVideoWindowImpl androidVideoWindowImpl; private InCallActivity inCallActivity; private GestureDetector mGestureDetector; - private float mZoomFactor; + private float mZoomFactor = 1; private float mZoomCenterX, mZoomCenterY; @SuppressWarnings("deprecation") // Warning useless because value is ignored and automatically set by new APIs. diff --git a/src/org/linphone/ui/CallButton.java b/src/org/linphone/ui/CallButton.java index 9acbb74eb..918912036 100644 --- a/src/org/linphone/ui/CallButton.java +++ b/src/org/linphone/ui/CallButton.java @@ -35,10 +35,10 @@ import android.widget.Toast; public class CallButton extends ImageView implements OnClickListener, AddressAware { private AddressText mAddress; - public void setAddressWidget(AddressText a) {mAddress = a;} + public void setAddressWidget(AddressText a) { mAddress = a; } - private OnClickListener externalClickListener; - public void setExternalClickListener(OnClickListener e) {externalClickListener = e;} + public void setExternalClickListener(OnClickListener e) { setOnClickListener(e); } + public void resetClickListener() { setOnClickListener(this); } public CallButton(Context context, AttributeSet attrs) { super(context, attrs); @@ -56,17 +56,11 @@ public class CallButton extends ImageView implements OnClickListener, AddressAwa LinphoneManager.getInstance().terminateCall(); onWrongDestinationAddress(); }; - - if (externalClickListener != null) externalClickListener.onClick(v); } - protected void onWrongDestinationAddress() { - Toast toast = Toast.makeText(getContext() + Toast.makeText(getContext() ,String.format(getResources().getString(R.string.warning_wrong_destination_address),mAddress.getText().toString()) - ,Toast.LENGTH_LONG); - toast.show(); + ,Toast.LENGTH_LONG).show(); } - - }