diff --git a/.gitignore b/.gitignore
index 47a01f1..6e93aad 100644
--- a/.gitignore
+++ b/.gitignore
@@ -27,6 +27,12 @@ local.properties
.idea/vcs.xml
*.iml
+# Android Studio 3 in .gitignore file.
+.idea/caches
+.idea/modules.xml
+# Comment next line if keeping position of elements in Navigation Editor is relevant for you
+.idea/navEditor.xml
+
# OS-specific files
.DS_Store
.DS_Store?
@@ -35,3 +41,6 @@ local.properties
.Trashes
ehthumbs.db
Thumbs.db
+.idea/caches/build_file_checksums.ser
+.idea/caches/build_file_checksums.ser
+.idea/caches/build_file_checksums.ser
diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser
index 107a483..1bef91b 100644
Binary files a/.idea/caches/build_file_checksums.ser and b/.idea/caches/build_file_checksums.ser differ
diff --git a/.idea/deploymentTargetDropDown.xml b/.idea/deploymentTargetDropDown.xml
new file mode 100644
index 0000000..be81f06
--- /dev/null
+++ b/.idea/deploymentTargetDropDown.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
index 2996d53..9bba60d 100644
--- a/.idea/gradle.xml
+++ b/.idea/gradle.xml
@@ -1,14 +1,20 @@
+
diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml
new file mode 100644
index 0000000..1593062
--- /dev/null
+++ b/.idea/jarRepositories.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
index 37a7509..d5d35ec 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -1,6 +1,6 @@
-
+
diff --git a/.idea/modules.xml b/.idea/modules.xml
deleted file mode 100644
index 74f19b5..0000000
--- a/.idea/modules.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/runConfigurations.xml b/.idea/runConfigurations.xml
deleted file mode 100644
index 7f68460..0000000
--- a/.idea/runConfigurations.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index f3a7109..89e70e6 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -1,11 +1,12 @@
apply plugin: 'com.android.application'
+apply plugin: 'com.google.gms.google-services'
android {
- compileSdkVersion 28
+ compileSdkVersion 29
defaultConfig {
applicationId "at.xtools.pwawrapper"
- minSdkVersion 20
- targetSdkVersion 28
+ minSdkVersion 21
+ targetSdkVersion 29
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
@@ -16,13 +17,21 @@ android {
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_1_8
+ targetCompatibility JavaVersion.VERSION_1_8
+ }
}
dependencies {
+ implementation platform('com.google.firebase:firebase-bom:29.0.0')
+ implementation 'com.google.firebase:firebase-messaging'
implementation fileTree(dir: 'libs', include: ['*.jar'])
+ implementation 'com.android.support.constraint:constraint-layout:1.1.3'
androidTestImplementation('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
- implementation 'com.android.support:appcompat-v7:28.0.0'
+// implementation 'com.android.support:appcompat-v7:28.0.0'
+ implementation 'androidx.appcompat:appcompat:1.2.0'
testImplementation 'junit:junit:4.12'
}
diff --git a/app/google-services.json b/app/google-services.json
new file mode 100644
index 0000000..ea6e930
--- /dev/null
+++ b/app/google-services.json
@@ -0,0 +1,47 @@
+{
+ "project_info": {
+ "project_number": "358518785097",
+ "project_id": "android-pwa-wrapper",
+ "storage_bucket": "android-pwa-wrapper.appspot.com"
+ },
+ "client": [
+ {
+ "client_info": {
+ "mobilesdk_app_id": "1:358518785097:android:77af61a87f6eace28eeb98",
+ "android_client_info": {
+ "package_name": "at.xtools.pwawrapper"
+ }
+ },
+ "oauth_client": [
+ {
+ "client_id": "358518785097-s8122ujh702e3mc27d3208n76baenoj6.apps.googleusercontent.com",
+ "client_type": 1,
+ "android_info": {
+ "package_name": "at.xtools.pwawrapper",
+ "certificate_hash": "42e03e1c91a2ecb6a02e096174660addd5046e02"
+ }
+ },
+ {
+ "client_id": "358518785097-jc5hmqp1alc2lg7f5h69bkdr50mq3fc3.apps.googleusercontent.com",
+ "client_type": 3
+ }
+ ],
+ "api_key": [
+ {
+ "current_key": "AIzaSyCpuWTJmrXZXkBJYTtSKwo4aGMSVwlr1GE"
+ }
+ ],
+ "services": {
+ "appinvite_service": {
+ "other_platform_oauth_client": [
+ {
+ "client_id": "358518785097-jc5hmqp1alc2lg7f5h69bkdr50mq3fc3.apps.googleusercontent.com",
+ "client_type": 3
+ }
+ ]
+ }
+ }
+ }
+ ],
+ "configuration_version": "1"
+}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index f60de54..f3c1664 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -1,33 +1,33 @@
-
-
-
-
-
-
-
+
+
+
-
+
+
+
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/at/xtools/pwawrapper/CallActivity.java b/app/src/main/java/at/xtools/pwawrapper/CallActivity.java
new file mode 100644
index 0000000..0b77956
--- /dev/null
+++ b/app/src/main/java/at/xtools/pwawrapper/CallActivity.java
@@ -0,0 +1,31 @@
+package at.xtools.pwawrapper;
+
+import androidx.appcompat.app.AppCompatActivity;
+
+import android.content.Intent;
+import android.os.Build;
+import android.os.Bundle;
+import android.view.WindowManager;
+
+public class CallActivity extends AppCompatActivity {
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_call);
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) {
+ setShowWhenLocked(true);
+ setTurnScreenOn(true);
+ }
+
+ getWindow().addFlags(
+ WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
+ | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD
+ | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
+ | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
+ | WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON);
+
+ stopService(new Intent(this, CallService.class));
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/at/xtools/pwawrapper/CallService.java b/app/src/main/java/at/xtools/pwawrapper/CallService.java
new file mode 100644
index 0000000..7704466
--- /dev/null
+++ b/app/src/main/java/at/xtools/pwawrapper/CallService.java
@@ -0,0 +1,95 @@
+package at.xtools.pwawrapper;
+
+import android.app.Notification;
+import android.app.NotificationChannel;
+import android.app.NotificationManager;
+import android.app.PendingIntent;
+import android.app.Service;
+import android.content.Intent;
+import android.graphics.Color;
+import android.os.Build;
+import android.os.IBinder;
+
+import androidx.annotation.Nullable;
+import androidx.annotation.RequiresApi;
+import androidx.core.app.NotificationCompat;
+
+public class CallService extends Service {
+
+ @Override
+ public int onStartCommand(Intent intent, int flags, int startId) {
+ Notification notification = buildNotification(intent);
+ startForeground(1, notification);
+ sendBroadcast(new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS));
+ return START_NOT_STICKY;
+ }
+
+ @Override
+ public void onDestroy() {
+ super.onDestroy();
+ stopForeground(true);
+ }
+
+ @Nullable
+ @Override
+ public IBinder onBind(Intent intent) {
+ return null;
+ }
+
+ private Notification buildNotification(Intent intent) {
+ String title = intent.getStringExtra("title");
+ String number = intent.getStringExtra("number");
+
+ Intent receiveCallAction = new Intent(this, HeadsUpNotificationActionReceiver.class);
+ receiveCallAction.putExtra("CALL_RESPONSE_ACTION_KEY", "CALL_RECEIVE_ACTION");
+ receiveCallAction.setAction("RECEIVE_CALL");
+
+ Intent cancelCallAction = new Intent(this, HeadsUpNotificationActionReceiver.class);
+ cancelCallAction.putExtra("CALL_RESPONSE_ACTION_KEY", "CALL_CANCEL_ACTION");
+ cancelCallAction.setAction("CANCEL_CALL");
+
+ PendingIntent receiveCallPendingIntent = PendingIntent.getBroadcast(this, 1200, receiveCallAction, PendingIntent.FLAG_UPDATE_CURRENT);
+ PendingIntent cancelCallPendingIntent = PendingIntent.getBroadcast(this, 1201, cancelCallAction, PendingIntent.FLAG_UPDATE_CURRENT);
+
+
+ Intent fullScreenIntent = new Intent(this, CallActivity.class);
+ fullScreenIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
+ PendingIntent fullScreenPendingIntent = PendingIntent.getActivity(this, 0, fullScreenIntent, PendingIntent.FLAG_ONE_SHOT);
+
+
+ String channelId = "";
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+ channelId = createNotificationChannel("incoming_call", "Incoming call");
+ }
+
+ NotificationCompat.Builder notificationBuilder =
+ new NotificationCompat.Builder(this, channelId)
+ .setSmallIcon(R.drawable.ic_appbar)
+ .setContentTitle(title)
+ .setContentText(number)
+ .setAutoCancel(true)
+ .setPriority(NotificationCompat.PRIORITY_HIGH)
+ .setCategory(NotificationCompat.CATEGORY_CALL)
+ .addAction(R.drawable.acpt_btn, "Answer", receiveCallPendingIntent)
+ .addAction(R.drawable.rjt_btn, "Decline", cancelCallPendingIntent)
+ // Use a full-screen intent only for the highest-priority alerts where you
+ // have an associated activity that you would like to launch after the user
+ // interacts with the notification. Also, if your app targets Android 10
+ // or higher, you need to request the USE_FULL_SCREEN_INTENT permission in
+ // order for the platform to invoke this notification.
+ .setFullScreenIntent(receiveCallPendingIntent, true);
+ notificationBuilder.setAutoCancel(true);
+ Notification incomingCallNotification = notificationBuilder.build();
+ return incomingCallNotification;
+ }
+
+ @RequiresApi(Build.VERSION_CODES.O)
+ private String createNotificationChannel(String channelId, String channelName) {
+ NotificationChannel chan = new NotificationChannel(channelId, channelName, NotificationManager.IMPORTANCE_HIGH);
+ chan.setLightColor(Color.BLUE);
+ chan.setLockscreenVisibility(Notification.VISIBILITY_PUBLIC);
+ NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
+ notificationManager.createNotificationChannel(chan);
+ return channelId;
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/at/xtools/pwawrapper/Constants.java b/app/src/main/java/at/xtools/pwawrapper/Constants.java
index 13b136e..59752a1 100644
--- a/app/src/main/java/at/xtools/pwawrapper/Constants.java
+++ b/app/src/main/java/at/xtools/pwawrapper/Constants.java
@@ -3,8 +3,10 @@
public class Constants {
public Constants(){}
// Root page
- public static String WEBAPP_URL = "https://www.leasingrechnen.at/";
- public static String WEBAPP_HOST = "leasingrechnen.at"; // used for checking Intent-URLs
+// public static String WEBAPP_URL = "https://test.wephone.app/phone/";
+ public static String WEBAPP_URL = "https://knguyen.wephone.app/phone/";
+// public static String WEBAPP_HOST = "test.wephone.app"; // used for checking Intent-URLs
+ public static String WEBAPP_HOST = "knguyen.wephone.app"; // used for checking Intent-URLs
// User Agent tweaks
public static boolean POSTFIX_USER_AGENT = true; // set to true to append USER_AGENT_POSTFIX to user agent
diff --git a/app/src/main/java/at/xtools/pwawrapper/HeadsUpNotificationActionReceiver.java b/app/src/main/java/at/xtools/pwawrapper/HeadsUpNotificationActionReceiver.java
new file mode 100644
index 0000000..685a4d2
--- /dev/null
+++ b/app/src/main/java/at/xtools/pwawrapper/HeadsUpNotificationActionReceiver.java
@@ -0,0 +1,36 @@
+package at.xtools.pwawrapper;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+
+public class HeadsUpNotificationActionReceiver extends BroadcastReceiver {
+
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ if (intent != null && intent.getExtras() != null) {
+ String action = intent.getStringExtra("CALL_RESPONSE_ACTION_KEY");
+
+ if (action != null) {
+ performClickAction(context, action);
+ }
+
+ Intent it = new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
+ context.sendBroadcast(it);
+ context.stopService(new Intent(context, CallService.class));
+ }
+ }
+
+ private void performClickAction(Context context, String action) {
+ if (action.equals("CALL_RECEIVE_ACTION")) {
+ Intent openIntent = null;
+ openIntent = new Intent(context, CallActivity.class);
+ openIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ context.startActivity(openIntent);
+ } else if (action.equals("CALL_CANCEL_ACTION")) {
+ context.stopService(new Intent(context, CallService.class));
+ Intent it = new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
+ context.sendBroadcast(it);
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/at/xtools/pwawrapper/JavaScriptInterface.java b/app/src/main/java/at/xtools/pwawrapper/JavaScriptInterface.java
new file mode 100644
index 0000000..fe1907a
--- /dev/null
+++ b/app/src/main/java/at/xtools/pwawrapper/JavaScriptInterface.java
@@ -0,0 +1,36 @@
+package at.xtools.pwawrapper;
+
+import android.app.Activity;
+import android.util.Log;
+import android.webkit.JavascriptInterface;
+import android.widget.Toast;
+
+import androidx.annotation.NonNull;
+
+import com.google.android.gms.tasks.OnCompleteListener;
+import com.google.android.gms.tasks.Task;
+import com.google.firebase.messaging.FirebaseMessaging;
+
+public class JavaScriptInterface {
+ Activity mActivity;
+
+ public JavaScriptInterface(Activity activity) {
+ this.mActivity = activity;
+ }
+
+ @JavascriptInterface
+ public void subscribeToTopic(String userId) {
+ FirebaseMessaging.getInstance().subscribeToTopic("incoming-call")
+ .addOnCompleteListener(new OnCompleteListener() {
+ @Override
+ public void onComplete(@NonNull Task task) {
+ String msg = "Subscribed to incoming-call topic " + userId;
+ if (!task.isSuccessful()) {
+ msg = "Failed to subscribe to incoming-call topic";
+ }
+ Log.d("JavaScriptInterface", msg);
+ Toast.makeText(mActivity, msg, Toast.LENGTH_SHORT).show();
+ }
+ });
+ }
+}
diff --git a/app/src/main/java/at/xtools/pwawrapper/MainActivity.java b/app/src/main/java/at/xtools/pwawrapper/MainActivity.java
index 0e20a64..a4c0744 100644
--- a/app/src/main/java/at/xtools/pwawrapper/MainActivity.java
+++ b/app/src/main/java/at/xtools/pwawrapper/MainActivity.java
@@ -1,9 +1,20 @@
package at.xtools.pwawrapper;
+import android.app.PendingIntent;
+import android.content.Context;
import android.content.Intent;
import android.net.Uri;
-import android.support.v7.app.AppCompatActivity;
+
+import androidx.annotation.NonNull;
+import androidx.appcompat.app.AppCompatActivity;
+
import android.os.Bundle;
+import android.util.Log;
+import android.widget.Toast;
+
+import com.google.android.gms.tasks.OnCompleteListener;
+import com.google.android.gms.tasks.Task;
+import com.google.firebase.messaging.FirebaseMessaging;
import at.xtools.pwawrapper.ui.UIManager;
import at.xtools.pwawrapper.webview.WebViewHelper;
@@ -34,25 +45,27 @@ protected void onCreate(Bundle savedInstanceState) {
Intent i = getIntent();
String intentAction = i.getAction();
// Handle URLs opened in Browser
- if (!intentHandled && intentAction != null && intentAction.equals(Intent.ACTION_VIEW)){
- Uri intentUri = i.getData();
- String intentText = "";
- if (intentUri != null){
- intentText = intentUri.toString();
- }
- // Load up the URL specified in the Intent
- if (!intentText.equals("")) {
- intentHandled = true;
- webViewHelper.loadIntentUrl(intentText);
- }
- } else {
- // Load up the Web App
- webViewHelper.loadHome();
- }
+ if (!intentHandled && intentAction != null && intentAction.equals(Intent.ACTION_VIEW)) {
+ Uri intentUri = i.getData();
+ String intentText = "";
+ if (intentUri != null) {
+ intentText = intentUri.toString();
+ }
+ // Load up the URL specified in the Intent
+ if (!intentText.equals("")) {
+ intentHandled = true;
+ webViewHelper.loadIntentUrl(intentText);
+ }
+ } else {
+ // Load up the Web App
+ webViewHelper.loadHome();
+ }
} catch (Exception e) {
// Load up the Web App
webViewHelper.loadHome();
}
+
+// this.subscribeToTopic();
}
@Override
@@ -76,4 +89,20 @@ public void onBackPressed() {
super.onBackPressed();
}
}
+
+ private void subscribeToTopic() {
+ FirebaseMessaging.getInstance().subscribeToTopic("weather")
+ .addOnCompleteListener(new OnCompleteListener() {
+ @Override
+ public void onComplete(@NonNull Task task) {
+ String msg = "Subscribed to weather topic";
+ if (!task.isSuccessful()) {
+ msg = "Failed to subscribe to weather topic";
+ }
+ Log.d("MainActivity", msg);
+ Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show();
+ }
+ });
+ }
}
+
diff --git a/app/src/main/java/at/xtools/pwawrapper/MyFirebaseMessagingService.java b/app/src/main/java/at/xtools/pwawrapper/MyFirebaseMessagingService.java
new file mode 100644
index 0000000..e91c1af
--- /dev/null
+++ b/app/src/main/java/at/xtools/pwawrapper/MyFirebaseMessagingService.java
@@ -0,0 +1,37 @@
+package at.xtools.pwawrapper;
+
+import android.app.Service;
+import android.content.Context;
+import android.content.Intent;
+import android.os.Build;
+import android.os.IBinder;
+
+import com.google.firebase.messaging.FirebaseMessagingService;
+import com.google.firebase.messaging.RemoteMessage;
+
+import java.util.Map;
+
+public class MyFirebaseMessagingService extends FirebaseMessagingService {
+ @Override
+ public void onMessageReceived(RemoteMessage remoteMessage) {
+ this.sendNotification(remoteMessage);
+ }
+
+ private void sendNotification(RemoteMessage remoteMessage) {
+ String title = remoteMessage.getData().get("title");
+ String number = remoteMessage.getData().get("number");
+
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+ Context context = getApplicationContext();
+ Intent intent = new Intent(context, CallService.class);
+ intent.putExtra("title", title);
+ intent.putExtra("number", number);
+ context.startForegroundService(intent);
+ } else {
+ Intent intent = new Intent(this, CallService.class);
+ intent.putExtra("title", title);
+ intent.putExtra("number", number);
+ startService(intent);
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/at/xtools/pwawrapper/webview/WebViewHelper.java b/app/src/main/java/at/xtools/pwawrapper/webview/WebViewHelper.java
index f19f49c..53bfff3 100644
--- a/app/src/main/java/at/xtools/pwawrapper/webview/WebViewHelper.java
+++ b/app/src/main/java/at/xtools/pwawrapper/webview/WebViewHelper.java
@@ -13,6 +13,8 @@
import android.os.Handler;
import android.os.Message;
import android.webkit.CookieManager;
+import android.webkit.HttpAuthHandler;
+import android.webkit.PermissionRequest;
import android.webkit.WebChromeClient;
import android.webkit.WebResourceError;
import android.webkit.WebResourceRequest;
@@ -21,6 +23,7 @@
import android.webkit.WebViewClient;
import at.xtools.pwawrapper.Constants;
+import at.xtools.pwawrapper.JavaScriptInterface;
import at.xtools.pwawrapper.R;
import at.xtools.pwawrapper.ui.UIManager;
@@ -81,6 +84,8 @@ public void setupWebView() {
// must be set for our js-popup-blocker:
webSettings.setSupportMultipleWindows(true);
+ webView.addJavascriptInterface(new JavaScriptInterface(this.activity), "Android");
+
// PWA settings
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
webSettings.setDatabasePath(activity.getApplicationContext().getFilesDir().getAbsolutePath());
@@ -136,6 +141,23 @@ public void onProgressChanged(WebView view, int newProgress) {
uiManager.setLoadingProgress(newProgress);
super.onProgressChanged(view, newProgress);
}
+
+ @Override
+ public void onPermissionRequest(final PermissionRequest request) {
+ WebViewHelper.this.activity.runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ request.grant(request.getResources());
+/*
+ if(request.getOrigin().toString().equals("https://admin.graam.com/")) {
+ request.grant(request.getResources());
+ } else {
+ request.deny();
+ }
+ */
+ }
+ });
+ }
});
// Set up Webview client
@@ -167,6 +189,11 @@ public void onReceivedError(WebView view, WebResourceRequest request, WebResourc
}
}
}
+
+ @Override
+ public void onReceivedHttpAuthRequest(WebView view, HttpAuthHandler handler, String host, String realm) {
+ handler.proceed("wephone", "smartcontact");
+ }
});
}
diff --git a/app/src/main/res/drawable-xhdpi/acpt_btn.png b/app/src/main/res/drawable-xhdpi/acpt_btn.png
new file mode 100644
index 0000000..d7f5ce3
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/acpt_btn.png differ
diff --git a/app/src/main/res/drawable-xhdpi/call_bg.png b/app/src/main/res/drawable-xhdpi/call_bg.png
new file mode 100644
index 0000000..271ebaf
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/call_bg.png differ
diff --git a/app/src/main/res/drawable-xhdpi/ic_stat_ac_unit.png b/app/src/main/res/drawable-xhdpi/ic_stat_ac_unit.png
new file mode 100644
index 0000000..b8b105a
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_stat_ac_unit.png differ
diff --git a/app/src/main/res/drawable-xhdpi/rjt_btn.png b/app/src/main/res/drawable-xhdpi/rjt_btn.png
new file mode 100644
index 0000000..5556107
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/rjt_btn.png differ
diff --git a/app/src/main/res/layout/activity_call.xml b/app/src/main/res/layout/activity_call.xml
new file mode 100644
index 0000000..e40ff64
--- /dev/null
+++ b/app/src/main/res/layout/activity_call.xml
@@ -0,0 +1,81 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml
index 2ce9744..1947280 100644
--- a/app/src/main/res/values-de/strings.xml
+++ b/app/src/main/res/values-de/strings.xml
@@ -3,4 +3,6 @@
Hier tippen um es erneut zu versuchen!
Keine App gefunden.
Keine App auf diesem Gerät kann die gewählte Aktion ausführen.
+ CallActivity
+ Incoming Call
diff --git a/app/src/main/res/values-en/strings.xml b/app/src/main/res/values-en/strings.xml
index a4ca516..8daffe4 100644
--- a/app/src/main/res/values-en/strings.xml
+++ b/app/src/main/res/values-en/strings.xml
@@ -3,4 +3,6 @@
Tap here to retry!
App not found.
No App on this device can carry out this action.
+ CallActivity
+ Incoming Call
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
index 3e9cbae..ade5c50 100644
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -6,4 +6,5 @@
#FFFFFF
#FFFFFF
#4caf50
+ #000000
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index bcef444..ba6b8fb 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -4,4 +4,6 @@
Tap here to retry!
App not found.
No App on this device can carry out this action.
+ CallActivity
+ Incoming Call
diff --git a/build.gradle b/build.gradle
index a359e95..31d39ae 100644
--- a/build.gradle
+++ b/build.gradle
@@ -6,8 +6,8 @@ buildscript {
google()
}
dependencies {
- classpath 'com.android.tools.build:gradle:3.4.0'
-
+ classpath "com.android.tools.build:gradle:4.1.3"
+ classpath 'com.google.gms:google-services:4.3.10'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
@@ -15,6 +15,7 @@ buildscript {
allprojects {
repositories {
+ google()
jcenter()
maven {
url "https://maven.google.com"
diff --git a/gradle.properties b/gradle.properties
index aac7c9b..c79c847 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -15,3 +15,4 @@ org.gradle.jvmargs=-Xmx1536m
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
# org.gradle.parallel=true
+android.useAndroidX=true
\ No newline at end of file
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 995d300..eed1a29 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
-#Wed May 15 15:21:45 CEST 2019
+#Tue Nov 16 17:32:38 ICT 2021
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-5.1.1-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-bin.zip