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