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

Commit b3586358 authored by Kevin Chyn's avatar Kevin Chyn
Browse files

Launch action to admin component when button clicked

Bug: 188847063
Test: "Set up parental controls" screen seen
Test: m -j RunSettingsLibRoboTests ROBOTEST_FILTER=BiometricActionDisabledByAdminControllerTest
Change-Id: Iad3ffbcd87fe3af5ebaf6a1e6078bf772606efc4
parent 4e84b884
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package com.android.settingslib.enterprise;

import android.annotation.NonNull;
import android.annotation.UserIdInt;
import android.content.Context;
import android.content.DialogInterface;
@@ -60,7 +61,8 @@ public interface ActionDisabledByAdminController {
     * Returns a listener for handling positive button clicks
     */
    @Nullable
    default DialogInterface.OnClickListener getPositiveButtonListener() {
    default DialogInterface.OnClickListener getPositiveButtonListener(@NonNull Context context,
            @NonNull RestrictedLockUtils.EnforcedAdmin enforcedAdmin) {
        return null;
    }
}
+17 −3
Original line number Diff line number Diff line
@@ -16,16 +16,25 @@

package com.android.settingslib.enterprise;

import android.annotation.NonNull;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.util.Log;

import androidx.annotation.Nullable;

import com.android.settingslib.RestrictedLockUtils;

public class BiometricActionDisabledByAdminController extends BaseActionDisabledByAdminController {

    private static final String TAG = "BiometricActionDisabledByAdminController";

    // These MUST not change, as they are the stable API between here and device admin specified
    // by the component below.
    private static final String ACTION_LEARN_MORE = "android.settings.LEARN_MORE";
    private static final String EXTRA_FROM_BIOMETRIC_SETUP = "from_biometric_setup";

    BiometricActionDisabledByAdminController(
            DeviceAdminStringProvider stringProvider) {
        super(stringProvider);
@@ -48,10 +57,15 @@ public class BiometricActionDisabledByAdminController extends BaseActionDisabled
    }

    @Override
    public DialogInterface.OnClickListener getPositiveButtonListener() {
    public DialogInterface.OnClickListener getPositiveButtonListener(@NonNull Context context,
            @NonNull RestrictedLockUtils.EnforcedAdmin enforcedAdmin) {
        return (dialog, which) -> {
            Log.d(TAG, "Positive button clicked");
            // TODO(b/188847063) Launch appropriate intent
            Log.d(TAG, "Positive button clicked, component: " + enforcedAdmin.component);
            final Intent intent = new Intent(ACTION_LEARN_MORE)
                    .setComponent(enforcedAdmin.component)
                    .putExtra(EXTRA_FROM_BIOMETRIC_SETUP, true)
                    .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(intent);
        };
    }
}
+79 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2021 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.settingslib.enterprise;

import static com.android.settingslib.enterprise.ActionDisabledByAdminControllerTestUtils.ENFORCED_ADMIN;
import static com.android.settingslib.enterprise.ActionDisabledByAdminControllerTestUtils.ENFORCEMENT_ADMIN_USER_ID;
import static com.android.settingslib.enterprise.FakeDeviceAdminStringProvider.DEFAULT_DEVICE_ADMIN_STRING_PROVIDER;

import static junit.framework.Assert.assertNotNull;
import static junit.framework.TestCase.assertEquals;
import static junit.framework.TestCase.assertTrue;

import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;

import android.content.ComponentName;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.UserHandle;

import com.android.settingslib.RestrictedLockUtils;

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.robolectric.RobolectricTestRunner;

@RunWith(RobolectricTestRunner.class)
public class BiometricActionDisabledByAdminControllerTest {

    private final ActionDisabledByAdminControllerTestUtils mTestUtils =
            new ActionDisabledByAdminControllerTestUtils();
    private final BiometricActionDisabledByAdminController mController =
            new BiometricActionDisabledByAdminController(DEFAULT_DEVICE_ADMIN_STRING_PROVIDER);

    @Before
    public void setUp() {
        mController.initialize(mTestUtils.createLearnMoreButtonLauncher());
        mController.updateEnforcedAdmin(ENFORCED_ADMIN, ENFORCEMENT_ADMIN_USER_ID);
    }

    @Test
    public void buttonClicked() {
        Context context = mock(Context.class);
        ComponentName componentName = mock(ComponentName.class);
        RestrictedLockUtils.EnforcedAdmin enforcedAdmin = new RestrictedLockUtils.EnforcedAdmin(
                componentName, new UserHandle(UserHandle.myUserId()));

        DialogInterface.OnClickListener listener =
                mController.getPositiveButtonListener(context, enforcedAdmin);
        assertNotNull("Biometric Controller must supply a non-null listener", listener);
        listener.onClick(mock(DialogInterface.class), 0 /* which */);

        ArgumentCaptor<Intent> intentCaptor = ArgumentCaptor.forClass(Intent.class);
        verify(context).startActivity(intentCaptor.capture());
        assertEquals("android.settings.LEARN_MORE",
                intentCaptor.getValue().getAction());
        assertTrue("from_biometric_setup", intentCaptor.getValue()
                .getBooleanExtra("from_biometric_setup", false));
        assertEquals(componentName, intentCaptor.getValue().getComponent());
    }

}