Home | History | Annotate | Download | only in managedprovisioning
      1 /*
      2  * Copyright (C) 2016 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 package com.android.cts.verifier.managedprovisioning;
     18 
     19 import android.app.AlertDialog;
     20 import android.app.admin.DevicePolicyManager;
     21 import android.content.ComponentName;
     22 import android.content.Context;
     23 import android.content.DialogInterface;
     24 import android.content.Intent;
     25 import android.os.Bundle;
     26 import android.provider.Settings;
     27 import android.view.View;
     28 
     29 import com.android.cts.verifier.ArrayTestListAdapter;
     30 import com.android.cts.verifier.DialogTestListActivity;
     31 import com.android.cts.verifier.R;
     32 import com.android.cts.verifier.TestResult;
     33 
     34 /**
     35  * This test verifies that if a work profile is locked with a separate password, Recents views for
     36  * for applications in the work profile are redacted appropriately.
     37  */
     38 public class RecentsRedactionActivity extends DialogTestListActivity {
     39     private static final String TAG = RecentsRedactionActivity.class.getSimpleName();
     40 
     41     public static final String ACTION_RECENTS =
     42             "com.android.cts.verifier.managedprovisioning.RECENTS";
     43 
     44     private ComponentName mAdmin;
     45     private DevicePolicyManager mDevicePolicyManager;
     46 
     47     private DialogTestListItem mVerifyRedacted;
     48     private DialogTestListItem mVerifyNotRedacted;
     49 
     50     public RecentsRedactionActivity() {
     51         super(R.layout.provisioning_byod,
     52                 /* title */ R.string.provisioning_byod_recents,
     53                 /* description */ R.string.provisioning_byod_recents_info,
     54                 /* instructions */ R.string.provisioning_byod_recents_instructions);
     55     }
     56 
     57     // Default listener will use setResult(), which won't work due to activity being in a new task.
     58     private View.OnClickListener clickListener = target -> {
     59         final int resultCode;
     60         switch (target.getId()) {
     61             case R.id.pass_button:
     62                 resultCode = TestResult.TEST_RESULT_PASSED;
     63                 break;
     64             case R.id.fail_button:
     65                 resultCode = TestResult.TEST_RESULT_FAILED;
     66                 break;
     67             default:
     68                 throw new IllegalArgumentException("Unknown id: " + target.getId());
     69         }
     70         Intent resultIntent = TestResult.createResult(RecentsRedactionActivity.this, resultCode,
     71                 getTestId(), getTestDetails(), getReportLog());
     72 
     73         new ByodFlowTestHelper(this).sendResultToPrimary(resultIntent);
     74         finish();
     75     };
     76 
     77     @Override
     78     protected void onCreate(Bundle savedInstanceState) {
     79         super.onCreate(savedInstanceState);
     80 
     81         findViewById(R.id.pass_button).setOnClickListener(clickListener);
     82         findViewById(R.id.fail_button).setOnClickListener(clickListener);
     83 
     84         mPrepareTestButton.setText(R.string.provisioning_byod_recents_lock_now);
     85         mPrepareTestButton.setOnClickListener((View view) -> {
     86             mDevicePolicyManager.lockNow();
     87         });
     88 
     89         mAdmin = new ComponentName(this, DeviceAdminTestReceiver.class.getName());
     90         mDevicePolicyManager = (DevicePolicyManager)
     91                 getSystemService(Context.DEVICE_POLICY_SERVICE);
     92     }
     93 
     94     @Override
     95     protected void setupTests(ArrayTestListAdapter adapter) {
     96         mVerifyRedacted = new DialogTestListItem(this,
     97                 /* name */ R.string.provisioning_byod_recents_verify_redacted,
     98                 /* testId */ "BYOD_recents_verify_redacted",
     99                 /* instruction */ R.string.provisioning_byod_recents_verify_redacted_instruction,
    100                 /* action */ new Intent(DevicePolicyManager.ACTION_SET_NEW_PASSWORD));
    101 
    102         mVerifyNotRedacted = new DialogTestListItem(this,
    103                 /* name */ R.string.provisioning_byod_recents_verify_not_redacted,
    104                 /* testId */ "BYOD_recents_verify_not_redacted",
    105                 /* intruction */ R.string.provisioning_byod_recents_verify_not_redacted_instruction,
    106                 /* action */ new Intent(Settings.ACTION_SECURITY_SETTINGS));
    107 
    108         adapter.add(mVerifyRedacted);
    109         adapter.add(mVerifyNotRedacted);
    110     }
    111 
    112     @Override
    113     public void onBackPressed() {
    114         if (hasPassword()) {
    115             requestRemovePassword();
    116             return;
    117         }
    118         super.onBackPressed();
    119     }
    120 
    121     private boolean hasPassword() {
    122         try {
    123             mDevicePolicyManager.setPasswordQuality(mAdmin,
    124                     DevicePolicyManager.PASSWORD_QUALITY_SOMETHING);
    125             return mDevicePolicyManager.isActivePasswordSufficient();
    126         } finally {
    127             mDevicePolicyManager.setPasswordQuality(mAdmin,
    128                     DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED);
    129         }
    130     }
    131 
    132     private void requestRemovePassword() {
    133         new AlertDialog.Builder(this)
    134                 .setIcon(android.R.drawable.ic_dialog_info)
    135                 .setTitle(R.string.provisioning_byod_recents)
    136                 .setMessage(R.string.provisioning_byod_recents_remove_password)
    137                 .setPositiveButton(android.R.string.ok, (DialogInterface dialog, int which) -> {
    138                     startActivity(new Intent(Settings.ACTION_SECURITY_SETTINGS));
    139                 })
    140                 .show();
    141     }
    142 }
    143