Dialer: Introduce asking for default dialer role
* Permissions like (READ|WRITE)_CALL_LOG and others
can only be granted to default dialer
* Add a screen which asks the user to make it default
Change-Id: I8aea9ca582d19191212b4a7a7cb15820d35d6bd0
diff --git a/java/com/android/dialer/app/res/values/cm_strings.xml b/java/com/android/dialer/app/res/values/cm_strings.xml
index 84d6ef7..79dee54 100644
--- a/java/com/android/dialer/app/res/values/cm_strings.xml
+++ b/java/com/android/dialer/app/res/values/cm_strings.xml
@@ -45,4 +45,7 @@
<string name="call_log_stats_title">Statistics</string>
<string name="action_menu_helplines">Helplines</string>
+
+ <string name="default_dialer_text">You must set Dialer as the default phone app to use it.</string>
+ <string name="default_dialer_action">Set as default</string>
</resources>
diff --git a/java/com/android/dialer/main/impl/AndroidManifest.xml b/java/com/android/dialer/main/impl/AndroidManifest.xml
index 743e6f8..3d78968 100644
--- a/java/com/android/dialer/main/impl/AndroidManifest.xml
+++ b/java/com/android/dialer/main/impl/AndroidManifest.xml
@@ -111,5 +111,11 @@
</activity>
+ <activity
+ android:name="com.android.dialer.main.impl.DefaultDialerActivity"
+ android:exported="false"
+ android:launchMode="singleTask"
+ android:theme="@style/MainActivityTheme" />
+
</application>
</manifest>
diff --git a/java/com/android/dialer/main/impl/DefaultDialerActivity.java b/java/com/android/dialer/main/impl/DefaultDialerActivity.java
new file mode 100644
index 0000000..d40e021
--- /dev/null
+++ b/java/com/android/dialer/main/impl/DefaultDialerActivity.java
@@ -0,0 +1,68 @@
+/*
+ * SPDX-FileCopyrightText: The LineageOS Project
+ * SPDX-License-Identifier: Apache-2.0
+ */
+package com.android.dialer.main.impl;
+
+import android.app.Activity;
+import android.app.role.RoleManager;
+import android.content.Context;
+import android.content.Intent;
+import android.os.Bundle;
+import android.support.v7.app.AppCompatActivity;
+import android.telecom.TelecomManager;
+import android.view.View;
+
+import com.android.dialer.R;
+import com.android.dialer.widget.EmptyContentView;
+
+public class DefaultDialerActivity extends AppCompatActivity implements
+ EmptyContentView.OnEmptyViewActionButtonClickedListener {
+
+ private static final int REQUEST_DEFAULT_DIALER = 1;
+
+ private RoleManager mRoleManager;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ setTheme(R.style.MainActivityTheme);
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.default_dialer_view);
+
+ mRoleManager = (RoleManager) getSystemService(Context.ROLE_SERVICE);
+
+ EmptyContentView emptyContentView = findViewById(R.id.empty_list_view);
+ emptyContentView.setDescription(R.string.default_dialer_text);
+ emptyContentView.setImage(R.drawable.quantum_ic_call_vd_theme_24);
+ emptyContentView.setActionLabel(R.string.default_dialer_action);
+ emptyContentView.setActionClickedListener(this);
+ emptyContentView.setVisibility(View.VISIBLE);
+ }
+
+ @Override
+ protected void onResume() {
+ super.onResume();
+ if (mRoleManager.isRoleHeld(RoleManager.ROLE_DIALER)) {
+ finish();
+ }
+ }
+
+ @Override
+ public void onEmptyViewActionButtonClicked() {
+ Intent roleRequest = mRoleManager.createRequestRoleIntent(RoleManager.ROLE_DIALER);
+ roleRequest.putExtra(TelecomManager.EXTRA_CHANGE_DEFAULT_DIALER_PACKAGE_NAME,
+ getPackageName());
+ startActivityForResult(roleRequest, REQUEST_DEFAULT_DIALER);
+ }
+
+ @Override
+ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+ super.onActivityResult(requestCode, resultCode, data);
+
+ if (requestCode == REQUEST_DEFAULT_DIALER) {
+ if (resultCode == Activity.RESULT_OK) {
+ finish();
+ }
+ }
+ }
+}
diff --git a/java/com/android/dialer/main/impl/MainActivity.java b/java/com/android/dialer/main/impl/MainActivity.java
index 60cb60f..d745483 100644
--- a/java/com/android/dialer/main/impl/MainActivity.java
+++ b/java/com/android/dialer/main/impl/MainActivity.java
@@ -25,6 +25,7 @@
import com.android.dialer.main.MainActivityPeer;
import com.android.dialer.main.impl.bottomnav.BottomNavBar.TabIndex;
import com.android.dialer.R;
+import com.android.dialer.telecom.TelecomUtil;
import com.android.dialer.util.TransactionSafeActivity;
/** This is the main activity for dialer. It hosts favorites, call log, search, dialpad, etc... */
@@ -63,6 +64,12 @@
@Override
protected void onResume() {
super.onResume();
+
+ if (!TelecomUtil.isDefaultDialer(this)) {
+ startActivity(new Intent(this, DefaultDialerActivity.class));
+ return;
+ }
+
activePeer.onActivityResume();
LocalBroadcastManager.getInstance(this)
diff --git a/java/com/android/dialer/main/impl/res/layout/default_dialer_view.xml b/java/com/android/dialer/main/impl/res/layout/default_dialer_view.xml
new file mode 100644
index 0000000..917ac99
--- /dev/null
+++ b/java/com/android/dialer/main/impl/res/layout/default_dialer_view.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ SPDX-FileCopyrightText: The LineageOS Project
+ SPDX-License-Identifier: Apache-2.0
+-->
+<LinearLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical">
+
+ <com.android.dialer.widget.EmptyContentView
+ android:id="@+id/empty_list_view"
+ android:layout_width="match_parent"
+ android:layout_height="0dp"
+ android:layout_weight="1"
+ android:layout_gravity="center"
+ android:gravity="center_vertical"/>
+</LinearLayout>
diff --git a/java/com/android/dialer/telecom/TelecomUtil.java b/java/com/android/dialer/telecom/TelecomUtil.java
index fe7c2d2..7867820 100644
--- a/java/com/android/dialer/telecom/TelecomUtil.java
+++ b/java/com/android/dialer/telecom/TelecomUtil.java
@@ -16,6 +16,7 @@
package com.android.dialer.telecom;
+import android.app.role.RoleManager;
import android.Manifest;
import android.Manifest.permission;
import android.content.ComponentName;
@@ -364,19 +365,18 @@
}
public boolean isDefaultDialer(Context context) {
- final boolean result =
- TextUtils.equals(
- context.getPackageName(), getTelecomManager(context).getDefaultDialerPackage());
- if (result) {
- warningLogged = false;
- } else {
+ final RoleManager rm = (RoleManager) context.getSystemService(Context.ROLE_SERVICE);
+ if (rm == null || !rm.isRoleHeld(RoleManager.ROLE_DIALER)) {
if (!warningLogged) {
// Log only once to prevent spam.
LogUtil.w(TAG, "Dialer is not currently set to be default dialer");
warningLogged = true;
}
+ return false;
}
- return result;
+
+ warningLogged = false;
+ return true;
}
}
}
diff --git a/java/com/android/dialer/widget/EmptyContentView.java b/java/com/android/dialer/widget/EmptyContentView.java
index 0234c83..6c5571e 100644
--- a/java/com/android/dialer/widget/EmptyContentView.java
+++ b/java/com/android/dialer/widget/EmptyContentView.java
@@ -21,6 +21,7 @@
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
+import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
@@ -42,7 +43,7 @@
private ImageView imageView;
private TextView descriptionView;
- private TextView actionView;
+ private Button actionView;
private OnEmptyViewActionButtonClickedListener onActionButtonClickedListener;
private @StringRes int actionLabel;
@@ -67,7 +68,7 @@
setClickable(true);
imageView = (ImageView) findViewById(R.id.empty_list_view_image);
descriptionView = (TextView) findViewById(R.id.empty_list_view_message);
- actionView = (TextView) findViewById(R.id.empty_list_view_action);
+ actionView = findViewById(R.id.empty_list_view_action);
actionView.setOnClickListener(this);
imageView.setImageTintList(
diff --git a/java/com/android/dialer/widget/res/layout-land/empty_content_view.xml b/java/com/android/dialer/widget/res/layout-land/empty_content_view.xml
index 84e6fc8..f912130 100644
--- a/java/com/android/dialer/widget/res/layout-land/empty_content_view.xml
+++ b/java/com/android/dialer/widget/res/layout-land/empty_content_view.xml
@@ -35,19 +35,13 @@
android:textColor="?android:attr/textColorSecondary"
android:textSize="@dimen/empty_list_message_text_size"/>
- <TextView
+ <Button
android:id="@+id/empty_list_view_action"
- style="@style/TextActionStyle"
+ style="@style/DialerPrimaryFlatButtonStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
- android:paddingTop="8dp"
- android:paddingBottom="8dp"
- android:paddingLeft="16dp"
- android:paddingRight="16dp"
- android:background="?android:attr/selectableItemBackground"
- android:clickable="true"
- android:gravity="center_horizontal"/>
+ android:layout_marginTop="16dp"/>
<Space
android:layout_width="match_parent"
diff --git a/java/com/android/dialer/widget/res/layout/empty_content_view.xml b/java/com/android/dialer/widget/res/layout/empty_content_view.xml
index 57bb2fd..7aef66b 100644
--- a/java/com/android/dialer/widget/res/layout/empty_content_view.xml
+++ b/java/com/android/dialer/widget/res/layout/empty_content_view.xml
@@ -33,19 +33,13 @@
android:textColor="?android:attr/textColorSecondary"
android:textSize="@dimen/empty_list_message_text_size"/>
- <TextView
+ <Button
android:id="@+id/empty_list_view_action"
- style="@style/TextActionStyle"
+ style="@style/DialerPrimaryFlatButtonStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
- android:paddingTop="8dp"
- android:paddingBottom="8dp"
- android:paddingLeft="16dp"
- android:paddingRight="16dp"
- android:background="?android:attr/selectableItemBackground"
- android:clickable="true"
- android:gravity="center_horizontal"/>
+ android:layout_marginTop="16dp"/>
<Space
android:layout_width="match_parent"