diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 4651035..609433a 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -22,6 +22,7 @@
+
diff --git a/app/src/main/java/com/cisco/sparksdk/kitchensink/actions/EventPubCallObserver.java b/app/src/main/java/com/cisco/sparksdk/kitchensink/actions/EventPubCallObserver.java
index e0939a6..67472f9 100644
--- a/app/src/main/java/com/cisco/sparksdk/kitchensink/actions/EventPubCallObserver.java
+++ b/app/src/main/java/com/cisco/sparksdk/kitchensink/actions/EventPubCallObserver.java
@@ -23,6 +23,7 @@
package com.cisco.sparksdk.kitchensink.actions;
+import com.cisco.sparksdk.kitchensink.actions.events.OnCallMembershipEvent;
import com.cisco.sparksdk.kitchensink.actions.events.OnConnectEvent;
import com.cisco.sparksdk.kitchensink.actions.events.OnDisconnectEvent;
import com.cisco.sparksdk.kitchensink.actions.events.OnMediaChangeEvent;
@@ -60,7 +61,7 @@ public void onMediaChanged(MediaChangedEvent mediaChangedEvent) {
@Override
public void onCallMembershipChanged(CallMembershipChangedEvent event) {
-
+ postEvent(new OnCallMembershipEvent(event));
}
private void postEvent(Object event) {
diff --git a/app/src/main/java/com/cisco/sparksdk/kitchensink/actions/events/OnCallMembershipEvent.java b/app/src/main/java/com/cisco/sparksdk/kitchensink/actions/events/OnCallMembershipEvent.java
new file mode 100644
index 0000000..b6f8966
--- /dev/null
+++ b/app/src/main/java/com/cisco/sparksdk/kitchensink/actions/events/OnCallMembershipEvent.java
@@ -0,0 +1,15 @@
+package com.cisco.sparksdk.kitchensink.actions.events;
+
+import com.ciscospark.androidsdk.phone.CallObserver;
+
+/**
+ * Created by qimdeng on 3/13/18.
+ */
+
+public class OnCallMembershipEvent {
+ public CallObserver.CallMembershipChangedEvent callEvent;
+
+ public OnCallMembershipEvent(CallObserver.CallMembershipChangedEvent event) {
+ this.callEvent = event;
+ }
+}
diff --git a/app/src/main/java/com/cisco/sparksdk/kitchensink/launcher/LauncherActivity.java b/app/src/main/java/com/cisco/sparksdk/kitchensink/launcher/LauncherActivity.java
index 1670188..8c7a1a6 100644
--- a/app/src/main/java/com/cisco/sparksdk/kitchensink/launcher/LauncherActivity.java
+++ b/app/src/main/java/com/cisco/sparksdk/kitchensink/launcher/LauncherActivity.java
@@ -24,15 +24,34 @@
package com.cisco.sparksdk.kitchensink.launcher;
import android.app.Activity;
+import android.app.ActivityManager;
import android.app.Fragment;
import android.app.FragmentManager;
+import android.app.NotificationManager;
+import android.content.Context;
import android.content.Intent;
+import android.graphics.Color;
import android.os.Bundle;
+import android.util.Log;
+import android.view.Window;
+import android.view.WindowManager;
+import android.widget.Switch;
+import android.widget.Toast;
import com.cisco.sparksdk.kitchensink.R;
import com.cisco.sparksdk.kitchensink.actions.commands.RequirePermissionAction;
+import com.cisco.sparksdk.kitchensink.actions.events.OnCallMembershipEvent;
+import com.cisco.sparksdk.kitchensink.actions.events.OnMediaChangeEvent;
import com.cisco.sparksdk.kitchensink.launcher.fragments.LauncherFragment;
import com.cisco.sparksdk.kitchensink.ui.BaseFragment;
+import com.ciscospark.androidsdk.phone.CallObserver;
+import com.github.benoitdion.ln.Ln;
+
+import org.greenrobot.eventbus.EventBus;
+import org.greenrobot.eventbus.Subscribe;
+import org.greenrobot.eventbus.ThreadMode;
+
+import java.util.List;
public class LauncherActivity extends Activity {
@@ -42,6 +61,13 @@ protected void onCreate(Bundle savedInstanceState) {
setContentView(R.layout.activity_launcher);
BaseFragment fragment = new LauncherFragment();
replace(fragment);
+ EventBus.getDefault().register(this);
+ }
+
+ @Override
+ public void onDestroy() {
+ super.onDestroy();
+ EventBus.getDefault().unregister(this);
}
@Override
@@ -75,4 +101,50 @@ public Fragment getFragment() {
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
RequirePermissionAction.PermissionsRequired(requestCode, grantResults);
}
+
+ @SuppressWarnings("unused")
+ @Subscribe(threadMode = ThreadMode.MAIN)
+ public void onEventMainThread(OnMediaChangeEvent event) {
+ if (event.callEvent instanceof CallObserver.SendingSharingEvent) {
+ Ln.d("Activity SendingSharingEvent: " + ((CallObserver.SendingSharingEvent)event.callEvent).isSending());
+ if (!((CallObserver.SendingSharingEvent)event.callEvent).isSending()){
+ cancelNotication();
+ moveToFront();
+ updateSharingSwitch(false);
+ Toast.makeText(this, "Stop to share content", Toast.LENGTH_SHORT).show();
+ }
+ }
+ }
+
+ @SuppressWarnings("unused")
+ @Subscribe(threadMode = ThreadMode.MAIN)
+ public void onEventMainThread(OnCallMembershipEvent event) {
+ if (event.callEvent instanceof CallObserver.MembershipSendingSharingEvent) {
+ Ln.d("Activity CallMembership email: " + event.callEvent.getCallMembership().getEmail() +
+ " isSendingSharing: " + event.callEvent.getCallMembership().isSendingSharing());
+ }
+ }
+
+ protected void moveToFront() {
+ final ActivityManager activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
+ final List recentTasks = activityManager.getRunningTasks(Integer.MAX_VALUE);
+
+ for (int i = 0; i < recentTasks.size(); i++) {
+ // bring to front
+ if (recentTasks.get(i).baseActivity.toShortString().indexOf("com.cisco.sparksdk.kitchensink") > -1) {
+ activityManager.moveTaskToFront(recentTasks.get(i).id, ActivityManager.MOVE_TASK_WITH_HOME);
+ }
+ }
+ }
+
+ private void cancelNotication(){
+ NotificationManager notifyManager = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE);
+ notifyManager.cancel(1);
+ }
+
+ private void updateSharingSwitch(boolean flag){
+ Switch shareSwitch = (Switch) findViewById(R.id.switchShareContent);
+ if (shareSwitch != null && shareSwitch.isChecked())
+ shareSwitch.setChecked(flag);
+ }
}
diff --git a/app/src/main/java/com/cisco/sparksdk/kitchensink/launcher/fragments/CallFragment.java b/app/src/main/java/com/cisco/sparksdk/kitchensink/launcher/fragments/CallFragment.java
index da3bfc7..75cccd1 100644
--- a/app/src/main/java/com/cisco/sparksdk/kitchensink/launcher/fragments/CallFragment.java
+++ b/app/src/main/java/com/cisco/sparksdk/kitchensink/launcher/fragments/CallFragment.java
@@ -24,9 +24,15 @@
package com.cisco.sparksdk.kitchensink.launcher.fragments;
+import android.app.NotificationManager;
+import android.app.PendingIntent;
+import android.content.Context;
+import android.content.Intent;
import android.content.res.Configuration;
import android.os.Bundle;
import android.support.constraint.ConstraintLayout;
+import android.support.v4.app.NotificationCompat;
+import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
@@ -49,6 +55,8 @@
import com.cisco.sparksdk.kitchensink.launcher.LauncherActivity;
import com.cisco.sparksdk.kitchensink.ui.BaseFragment;
import com.cisco.sparksdk.kitchensink.ui.FullScreenSwitcher;
+import com.ciscospark.androidsdk.phone.CallObserver;
+import com.github.benoitdion.ln.Ln;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
@@ -58,11 +66,12 @@
import butterknife.OnClick;
import static com.ciscospark.androidsdk.phone.CallObserver.RemoteSendingSharingEvent;
-
+import static com.ciscospark.androidsdk.phone.CallObserver.SendingSharingEvent;
/**
* A simple {@link BaseFragment} subclass.
*/
public class CallFragment extends BaseFragment {
+ protected static final int MEDIA_PROJECTION_REQUEST = 2;
private static final String CALLEE = "callee";
private static final String INCOMING_CALL = "incoming";
private SparkAgent agent;
@@ -108,6 +117,9 @@ public class CallFragment extends BaseFragment {
@BindView(R.id.call_layout)
ConstraintLayout layout;
+ @BindView(R.id.switchShareContent)
+ Switch switchShareContent;
+
// Required empty public constructor
public CallFragment() {
}
@@ -206,7 +218,7 @@ public void onRemoteViewClicked() {
}
@OnCheckedChanged({R.id.switchSendVideo, R.id.switchSendAudio,
- R.id.switchReceiveVideo, R.id.switchReceiveAudio})
+ R.id.switchReceiveVideo, R.id.switchReceiveAudio, R.id.switchShareContent})
public void onSwitchCallAbility(Switch s) {
switch (s.getId()) {
case R.id.switchSendVideo:
@@ -220,13 +232,19 @@ public void onSwitchCallAbility(Switch s) {
break;
case R.id.switchSendAudio:
agent.sendAudio(s.isChecked());
- break;
case R.id.switchReceiveVideo:
agent.receiveVideo(s.isChecked());
break;
case R.id.switchReceiveAudio:
agent.receiveAudio(s.isChecked());
break;
+ case R.id.switchShareContent:
+ if (s.isChecked())
+ agent.getActiveCall().startSharing(r -> {Ln.d("startSharing result: " + r);});
+ else
+ agent.getActiveCall().stopSharing(r -> {Ln.d("stopSharing result: " + r);});
+ break;
+
}
}
@@ -327,7 +345,14 @@ public void onEventMainThread(OnDisconnectEvent event) {
@Subscribe(threadMode = ThreadMode.MAIN)
public void onEventMainThread(OnMediaChangeEvent event) {
if (event.callEvent instanceof RemoteSendingSharingEvent) {
+ Ln.d("RemoteSendingSharingEvent: " + ((RemoteSendingSharingEvent)event.callEvent).isSending());
updateScreenShareView();
+ } else if (event.callEvent instanceof SendingSharingEvent) {
+ Ln.d("SendingSharingEvent: " + ((SendingSharingEvent)event.callEvent).isSending());
+ if (((SendingSharingEvent)event.callEvent).isSending()){
+ sendNotification();
+ backToHome();
+ }
}
}
@@ -336,4 +361,26 @@ public void onEventMainThread(OnMediaChangeEvent event) {
public void onEventMainThread(PermissionAcquiredEvent event) {
makeCall();
}
+
+ private void backToHome() {
+ Intent intent = new Intent(Intent.ACTION_MAIN);
+ intent.addCategory(Intent.CATEGORY_HOME);
+ this.startActivity(intent);
+ }
+
+ private void sendNotification(){
+ Intent appIntent = new Intent(getActivity(), LauncherActivity.class);
+ appIntent.setAction(Intent.ACTION_MAIN);
+ appIntent.addCategory(Intent.CATEGORY_LAUNCHER);
+ appIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK| Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
+ PendingIntent contentIntent = PendingIntent.getActivity(getActivity(), 0,appIntent,PendingIntent.FLAG_UPDATE_CURRENT);
+
+ NotificationManager notifyManager = (NotificationManager) getActivity().getSystemService(Context.NOTIFICATION_SERVICE);
+ NotificationCompat.Builder builder = new NotificationCompat.Builder(getActivity())
+ .setSmallIcon(R.mipmap.ic_launcher)
+ .setContentTitle("Cisco Kichensink")
+ .setContentText("I'm sharing content")
+ .setContentIntent(contentIntent);
+ notifyManager.notify(1, builder.build());
+ }
}
diff --git a/app/src/main/res/layout/fragment_call.xml b/app/src/main/res/layout/fragment_call.xml
index a2dc942..0dad869 100644
--- a/app/src/main/res/layout/fragment_call.xml
+++ b/app/src/main/res/layout/fragment_call.xml
@@ -108,7 +108,7 @@
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toLeftOf="@+id/switchLoudSpeaker"
- app:layout_constraintTop_toBottomOf="@+id/textReceiveAudio" />
+ app:layout_constraintTop_toBottomOf="@+id/TextShareContent" />
+
+
+
+
+