Home | History | Annotate | Download | only in managedprovisioning
      1 /*
      2  * Copyright (C) 2015 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.Activity;
     20 import android.app.AlertDialog;
     21 import android.app.Notification;
     22 import android.app.NotificationChannel;
     23 import android.app.NotificationManager;
     24 import android.app.admin.DevicePolicyManager;
     25 import android.content.ActivityNotFoundException;
     26 import android.content.ComponentName;
     27 import android.content.Context;
     28 import android.content.DialogInterface;
     29 import android.content.Intent;
     30 import android.util.Log;
     31 import android.widget.Toast;
     32 import com.android.cts.verifier.IntentDrivenTestActivity;
     33 import com.android.cts.verifier.IntentDrivenTestActivity.ButtonInfo;
     34 import com.android.cts.verifier.R;
     35 import com.android.cts.verifier.TestListAdapter.TestListItem;
     36 
     37 public class Utils {
     38 
     39     private static final String TAG = "CtsVerifierByodUtils";
     40     static final int BUGREPORT_NOTIFICATION_ID = 12345;
     41     private static final String CHANNEL_ID = "BugReport";
     42     static final String FILE_PROVIDER_AUTHORITY =
     43             "com.android.cts.verifier.managedprovisioning.fileprovider";
     44 
     45     static TestListItem createInteractiveTestItem(Activity activity, String id, int titleRes,
     46             int infoRes, ButtonInfo[] buttonInfos) {
     47         return TestListItem.newTest(activity, titleRes,
     48                 id, new Intent(activity, IntentDrivenTestActivity.class)
     49                 .putExtra(IntentDrivenTestActivity.EXTRA_ID, id)
     50                 .putExtra(IntentDrivenTestActivity.EXTRA_TITLE, titleRes)
     51                 .putExtra(IntentDrivenTestActivity.EXTRA_INFO, infoRes)
     52                 .putExtra(IntentDrivenTestActivity.EXTRA_BUTTONS, buttonInfos),
     53                 null);
     54     }
     55 
     56     static TestListItem createInteractiveTestItem(Activity activity, String id, int titleRes,
     57             int infoRes, ButtonInfo buttonInfo) {
     58         return createInteractiveTestItem(activity, id, titleRes, infoRes,
     59                 new ButtonInfo[] { buttonInfo });
     60     }
     61 
     62     static void requestDeleteManagedProfile(Context context) {
     63         try {
     64             Intent intent = new Intent(ByodHelperActivity.ACTION_REMOVE_MANAGED_PROFILE);
     65             intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
     66             context.startActivity(intent);
     67         }
     68         catch (ActivityNotFoundException e) {
     69             Log.d(TAG, "requestDeleteProfileOwner: ActivityNotFoundException", e);
     70         }
     71     }
     72 
     73     static void provisionManagedProfile(Activity activity, ComponentName admin, int requestCode) {
     74         Intent sending = new Intent(DevicePolicyManager.ACTION_PROVISION_MANAGED_PROFILE);
     75         sending.putExtra(DevicePolicyManager.EXTRA_PROVISIONING_DEVICE_ADMIN_COMPONENT_NAME, admin);
     76         if (sending.resolveActivity(activity.getPackageManager()) != null) {
     77             activity.startActivityForResult(sending, requestCode);
     78         } else {
     79             showToast(activity, R.string.provisioning_byod_disabled);
     80         }
     81     }
     82 
     83     static void showBugreportNotification(Context context, String msg, int notificationId) {
     84         NotificationManager mNotificationManager =
     85                 (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
     86 
     87         NotificationChannel channel = new NotificationChannel(CHANNEL_ID,
     88                 CHANNEL_ID, NotificationManager.IMPORTANCE_HIGH);
     89         mNotificationManager.createNotificationChannel(channel);
     90         Notification notification = new Notification.Builder(context)
     91                 .setChannelId(CHANNEL_ID)
     92                 .setSmallIcon(R.drawable.icon)
     93                 .setContentTitle(context.getString(
     94                         R.string.device_owner_requesting_bugreport_tests))
     95                 .setContentText(msg)
     96                 .setStyle(new Notification.BigTextStyle().bigText(msg))
     97                 .build();
     98         mNotificationManager.notify(notificationId, notification);
     99     }
    100 
    101     static void showToast(Context context, int messageId) {
    102         Toast.makeText(context, messageId, Toast.LENGTH_SHORT).show();
    103     }
    104 
    105     /**
    106      * Prompts the tester to set a screen lock credential, or change it if one exists.
    107      *
    108      * An instruction dialog is shown before the tester is sent to the ChooseLockGeneric activity
    109      * in Settings.
    110      *
    111      * @param activity The calling activity where the result is handled
    112      * @param requestCode The callback request code when the lock is set
    113      */
    114     static void setScreenLock(Activity activity, int requestCode) {
    115         final Intent intent = new Intent(DevicePolicyManager.ACTION_SET_NEW_PASSWORD);
    116         new AlertDialog.Builder(activity)
    117                 .setTitle(R.string.provisioning_byod)
    118                 .setMessage(R.string.provisioning_byod_set_screen_lock_dialog_message)
    119                 .setPositiveButton(R.string.go_button_text, (DialogInterface dialog, int which) ->
    120                         activity.startActivityForResult(intent, requestCode))
    121                 .show();
    122     }
    123 
    124     /**
    125      * Prompts the tester to remove the current screen lock credential.
    126      *
    127      * An instruction dialog is shown before the tester is sent to the ChooseLockGeneric activity
    128      * in Settings.
    129      *
    130      * @param activity The calling activity
    131      */
    132     static void removeScreenLock(Activity activity) {
    133         final Intent intent = new Intent(DevicePolicyManager.ACTION_SET_NEW_PASSWORD);
    134         new AlertDialog.Builder(activity)
    135                 .setTitle(R.string.provisioning_byod)
    136                 .setMessage(R.string.provisioning_byod_remove_screen_lock_dialog_message)
    137                 .setPositiveButton(R.string.go_button_text, (DialogInterface dialog, int which) ->
    138                         activity.startActivity(intent))
    139                 .show();
    140     }
    141 }
    142