Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 89c9ff50 authored by twyen's avatar twyen Committed by Copybara-Service
Browse files

Add PreCall step to check permission

If CALL_PHONE is missing PreCall will abort immediately and show a toast.

Bug: 70565989,70566029
Test: PermissionCheckActionTest
PiperOrigin-RevId: 179123070
Change-Id: I0d43c6acd44e77562752c871bed0223b2f787dde
parent 937bd02d
Loading
Loading
Loading
Loading
+54 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2017 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License
 */

package com.android.dialer.precall.impl;

import android.content.Context;
import android.widget.Toast;
import com.android.dialer.callintent.CallIntentBuilder;
import com.android.dialer.precall.PreCallAction;
import com.android.dialer.precall.PreCallCoordinator;
import com.android.dialer.util.PermissionsUtil;

/** Aborts call and show a toast if phone permissions are missing. */
public class PermissionCheckAction implements PreCallAction {

  @Override
  public boolean requiresUi(Context context, CallIntentBuilder builder) {
    return !PermissionsUtil.hasPhonePermissions(context);
  }

  @Override
  public void runWithoutUi(Context context, CallIntentBuilder builder) {}

  @Override
  public void runWithUi(PreCallCoordinator coordinator) {
    if (!requiresUi(coordinator.getActivity(), coordinator.getBuilder())) {
      return;
    }
    Toast.makeText(
            coordinator.getActivity(),
            coordinator
                .getActivity()
                .getString(R.string.pre_call_permission_check_no_phone_permission),
            Toast.LENGTH_LONG)
        .show();
    coordinator.abortCall();
  }

  @Override
  public void onDiscard() {}
}
+2 −1
Original line number Diff line number Diff line
@@ -38,7 +38,8 @@ public class PreCallImpl implements PreCall {

  @Override
  public ImmutableList<PreCallAction> getActions() {
    return ImmutableList.of(new CallingAccountSelector(), new AssistedDialAction());
    return ImmutableList.of(
        new PermissionCheckAction(), new CallingAccountSelector(), new AssistedDialAction());
  }

  @NonNull
+3 −0
Original line number Diff line number Diff line
@@ -15,6 +15,9 @@
  ~ limitations under the License
  -->
<resources>
  <!-- Toast when the user tried to place a call but has revoked phone permission [CHAR_LIMIT=none]  -->
  <string name="pre_call_permission_check_no_phone_permission">Cannot make call without phone permission</string>

  <!-- Title of the dialog to select which SIM to call with before making a call, if the device has
  multiple SIMs [CHAR LIMIT=40]-->
  <string name="pre_call_select_phone_account">Choose SIM for this call</string>
+3 −0
Original line number Diff line number Diff line
@@ -157,6 +157,9 @@ public abstract class TelecomUtil {
    if (TextUtils.isEmpty(phoneAccountHandle.getId())) {
      return Optional.absent();
    }
    if (!hasPermission(context, permission.READ_PHONE_STATE)) {
      return Optional.absent();
    }
    SubscriptionManager subscriptionManager = context.getSystemService(SubscriptionManager.class);
    List<SubscriptionInfo> subscriptionInfos = subscriptionManager.getActiveSubscriptionInfoList();
    if (subscriptionInfos == null) {