summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--AndroidManifest.xml2
-rw-r--r--res/values/strings.xml5
-rw-r--r--src/com/android/launcher3/Launcher.java37
3 files changed, 42 insertions, 2 deletions
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 1f908d6ec..1f28ad67f 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -66,7 +66,7 @@
android:backupAgent="com.android.launcher3.LauncherBackupAgentHelper"
android:hardwareAccelerated="true"
android:icon="@mipmap/ic_launcher_home"
- android:label="@string/application_name"
+ android:label="@string/app_name"
android:largeHeap="@bool/config_largeHeap"
android:restoreAnyVersion="true"
android:supportsRtl="true" >
diff --git a/res/values/strings.xml b/res/values/strings.xml
index a17437e80..ecbdcc2ad 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -31,7 +31,7 @@
<string name="receive_first_load_broadcast_permission" translatable="false">com.android.launcher3.permission.RECEIVE_FIRST_LOAD_BROADCAST</string>
<!-- Application name -->
- <string name="application_name">Launcher3</string>
+ <string name="app_name">Launcher3</string>
<!-- Default folder name -->
<string name="folder_name"></string>
<!-- Work folder name -->
@@ -103,6 +103,9 @@
<string name="permdesc_write_settings">Allows the app to change the settings and
shortcuts in Home.</string>
+ <!-- Toast shown on clicking a direct call shortcut. [CHAR_LIMIT=80] -->
+ <string name="msg_no_phone_permission"><xliff:g id="app_name" example="Launcher3">%1$s</xliff:g> is not allowed to make phone calls</string>
+
<!-- Widgets: -->
<skip />
diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java
index 6a9dde15c..5fde6159d 100644
--- a/src/com/android/launcher3/Launcher.java
+++ b/src/com/android/launcher3/Launcher.java
@@ -16,6 +16,7 @@
package com.android.launcher3;
+import android.Manifest;
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.AnimatorSet;
@@ -151,6 +152,8 @@ public class Launcher extends Activity
private static final int REQUEST_BIND_APPWIDGET = 11;
private static final int REQUEST_RECONFIGURE_APPWIDGET = 12;
+ private static final int REQUEST_PERMISSION_CALL_PHONE = 13;
+
private static final int WORKSPACE_BACKGROUND_GRADIENT = 0;
private static final int WORKSPACE_BACKGROUND_TRANSPARENT = 1;
private static final int WORKSPACE_BACKGROUND_BLACK = 2;
@@ -821,6 +824,24 @@ public class Launcher extends Activity
/** @Override for MNC */
public void onRequestPermissionsResult(int requestCode, String[] permissions,
int[] grantResults) {
+ if (requestCode == REQUEST_PERMISSION_CALL_PHONE && sPendingAddItem != null
+ && sPendingAddItem.requestCode == REQUEST_PERMISSION_CALL_PHONE) {
+ View v = null;
+ CellLayout layout = getCellLayout(sPendingAddItem.container, sPendingAddItem.screenId);
+ if (layout != null) {
+ v = layout.getChildAt(sPendingAddItem.cellX, sPendingAddItem.cellY);
+ }
+ Intent intent = sPendingAddItem.intent;
+ sPendingAddItem = null;
+ if (grantResults.length > 0
+ && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
+ startActivity(v, intent, null);
+ } else {
+ // TODO: Show a snack bar with link to settings
+ Toast.makeText(this, getString(R.string.msg_no_phone_permission,
+ getString(R.string.app_name)), Toast.LENGTH_SHORT).show();
+ }
+ }
if (mLauncherCallbacks != null) {
mLauncherCallbacks.onRequestPermissionsResult(requestCode, permissions,
grantResults);
@@ -2943,6 +2964,22 @@ public class Launcher extends Activity
}
return true;
} catch (SecurityException e) {
+ if (Utilities.ATLEAST_MARSHMALLOW && tag instanceof ItemInfo) {
+ // Due to legacy reasons, direct call shortcuts require Launchers to have the
+ // corresponding permission. Show the appropriate permission prompt if that
+ // is the case.
+ if (intent.getComponent() == null
+ && Intent.ACTION_CALL.equals(intent.getAction())
+ && checkSelfPermission(Manifest.permission.CALL_PHONE) !=
+ PackageManager.PERMISSION_GRANTED) {
+ // TODO: Rename sPendingAddItem to a generic name.
+ sPendingAddItem = preparePendingAddArgs(REQUEST_PERMISSION_CALL_PHONE, intent,
+ 0, (ItemInfo) tag);
+ requestPermissions(new String[]{Manifest.permission.CALL_PHONE},
+ REQUEST_PERMISSION_CALL_PHONE);
+ return false;
+ }
+ }
Toast.makeText(this, R.string.activity_not_found, Toast.LENGTH_SHORT).show();
Log.e(TAG, "Launcher does not have the permission to launch " + intent +
". Make sure to create a MAIN intent-filter for the corresponding activity " +