Merge "Launch action to admin component when button clicked" into sc-dev
This commit is contained in:
@@ -16,6 +16,7 @@
|
|||||||
|
|
||||||
package com.android.settingslib.enterprise;
|
package com.android.settingslib.enterprise;
|
||||||
|
|
||||||
|
import android.annotation.NonNull;
|
||||||
import android.annotation.UserIdInt;
|
import android.annotation.UserIdInt;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.DialogInterface;
|
import android.content.DialogInterface;
|
||||||
@@ -60,7 +61,8 @@ public interface ActionDisabledByAdminController {
|
|||||||
* Returns a listener for handling positive button clicks
|
* Returns a listener for handling positive button clicks
|
||||||
*/
|
*/
|
||||||
@Nullable
|
@Nullable
|
||||||
default DialogInterface.OnClickListener getPositiveButtonListener() {
|
default DialogInterface.OnClickListener getPositiveButtonListener(@NonNull Context context,
|
||||||
|
@NonNull RestrictedLockUtils.EnforcedAdmin enforcedAdmin) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,16 +16,25 @@
|
|||||||
|
|
||||||
package com.android.settingslib.enterprise;
|
package com.android.settingslib.enterprise;
|
||||||
|
|
||||||
|
import android.annotation.NonNull;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.DialogInterface;
|
import android.content.DialogInterface;
|
||||||
|
import android.content.Intent;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
|
|
||||||
|
import com.android.settingslib.RestrictedLockUtils;
|
||||||
|
|
||||||
public class BiometricActionDisabledByAdminController extends BaseActionDisabledByAdminController {
|
public class BiometricActionDisabledByAdminController extends BaseActionDisabledByAdminController {
|
||||||
|
|
||||||
private static final String TAG = "BiometricActionDisabledByAdminController";
|
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(
|
BiometricActionDisabledByAdminController(
|
||||||
DeviceAdminStringProvider stringProvider) {
|
DeviceAdminStringProvider stringProvider) {
|
||||||
super(stringProvider);
|
super(stringProvider);
|
||||||
@@ -48,10 +57,15 @@ public class BiometricActionDisabledByAdminController extends BaseActionDisabled
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public DialogInterface.OnClickListener getPositiveButtonListener() {
|
public DialogInterface.OnClickListener getPositiveButtonListener(@NonNull Context context,
|
||||||
|
@NonNull RestrictedLockUtils.EnforcedAdmin enforcedAdmin) {
|
||||||
return (dialog, which) -> {
|
return (dialog, which) -> {
|
||||||
Log.d(TAG, "Positive button clicked");
|
Log.d(TAG, "Positive button clicked, component: " + enforcedAdmin.component);
|
||||||
// TODO(b/188847063) Launch appropriate intent
|
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);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,79 @@
|
|||||||
|
/*
|
||||||
|
* 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());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user