call: show activity on incoming call and lock screen

* launch CallActivity on incoming call
* make CallActivity available on lock screen

Uses API 27 (Android 8.1) so update the platform.

Change-Id: Ie4f89fdd728def5c58fb1012b41ff141c22a3544
diff --git a/ring-android/app/src/main/AndroidManifest.xml b/ring-android/app/src/main/AndroidManifest.xml
index 7cbba2d..0dfe1a0 100644
--- a/ring-android/app/src/main/AndroidManifest.xml
+++ b/ring-android/app/src/main/AndroidManifest.xml
@@ -157,6 +157,7 @@
             android:label="@string/app_name"
             android:screenOrientation="fullUser"
             android:theme="@style/AppTheme.ActionBar.Transparent"
+            android:showOnLockScreen="true"
             android:windowSoftInputMode="adjustPan|stateHidden">
             <intent-filter>
                 <action android:name="android.intent.action.CALL" />
@@ -276,6 +277,7 @@
 
         <activity
             android:name="cx.ring.tv.call.TVCallActivity"
+            android:showOnLockScreen="true"
             android:theme="@style/AppThemeBase">
             <intent-filter>
                 <action android:name="cx.ring.action.CALL" />
diff --git a/ring-android/app/src/main/java/cx/ring/client/CallActivity.java b/ring-android/app/src/main/java/cx/ring/client/CallActivity.java
index 65bab4d..8c3b1d0 100644
--- a/ring-android/app/src/main/java/cx/ring/client/CallActivity.java
+++ b/ring-android/app/src/main/java/cx/ring/client/CallActivity.java
@@ -26,10 +26,12 @@
 import android.app.FragmentTransaction;
 import android.content.Intent;
 import android.content.res.Configuration;
+import android.os.Build;
 import android.os.Bundle;
 import android.support.v7.app.AppCompatActivity;
 import android.view.KeyEvent;
 import android.view.View;
+import android.view.WindowManager;
 
 import cx.ring.BuildConfig;
 import cx.ring.R;
@@ -54,6 +56,14 @@
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
 
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) {
+            setTurnScreenOn(true);
+            setShowWhenLocked(true);
+        } else {
+            getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED|
+                    WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
+        }
+
         setContentView(R.layout.activity_call_layout);
 
         mMainView = findViewById(R.id.main_call_layout);
diff --git a/ring-android/app/src/main/java/cx/ring/service/DRingService.java b/ring-android/app/src/main/java/cx/ring/service/DRingService.java
index a6df8ca..a30c5fb 100644
--- a/ring-android/app/src/main/java/cx/ring/service/DRingService.java
+++ b/ring-android/app/src/main/java/cx/ring/service/DRingService.java
@@ -758,14 +758,14 @@
                 case INCOMING_CALL:
 
                     SipCall call = arg.getEventInput(ServiceEvent.EventInput.CALL, SipCall.class);
-                    if (call != null && isTv()) {
+                    if (call != null) {
                         Log.d(TAG, "call id : " + call.getCallId());
                         Bundle extras = new Bundle();
                         extras.putString("account", mAccountService.getCurrentAccount().getAccountID());
                         extras.putString("callId", call.getCallId());
                         startActivity(new Intent(Intent.ACTION_VIEW)
                                 .putExtras(extras)
-                                .setClass(getApplicationContext(), TVCallActivity.class)
+                                .setClass(getApplicationContext(), isTv() ? TVCallActivity.class : CallActivity.class)
                                 .setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_NEW_TASK));
                     }
                     break;
diff --git a/ring-android/app/src/main/java/cx/ring/tv/call/TVCallActivity.java b/ring-android/app/src/main/java/cx/ring/tv/call/TVCallActivity.java
index 10efb7b..50426e0 100644
--- a/ring-android/app/src/main/java/cx/ring/tv/call/TVCallActivity.java
+++ b/ring-android/app/src/main/java/cx/ring/tv/call/TVCallActivity.java
@@ -21,10 +21,12 @@
 import android.app.Activity;
 import android.app.FragmentManager;
 import android.app.FragmentTransaction;
+import android.os.Build;
 import android.os.Bundle;
 import android.text.TextUtils;
 import android.view.KeyEvent;
 import android.view.MotionEvent;
+import android.view.WindowManager;
 
 import cx.ring.R;
 import cx.ring.application.RingApplication;
@@ -39,6 +41,14 @@
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
+
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) {
+            setTurnScreenOn(true);
+            setShowWhenLocked(true);
+        } else {
+            getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED|
+                    WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
+        }
         setContentView(R.layout.tv_activity_call);
 
         // dependency injection