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.voicemail; 18 19 import android.app.Activity; 20 import android.app.role.RoleManager; 21 import android.content.BroadcastReceiver; 22 import android.content.Context; 23 import android.content.Intent; 24 import android.content.IntentFilter; 25 import android.provider.Settings; 26 import android.telecom.TelecomManager; 27 import android.view.View; 28 import android.view.View.OnClickListener; 29 import android.widget.Button; 30 import android.widget.ImageView; 31 import android.widget.TextView; 32 import android.widget.Toast; 33 34 import com.android.cts.verifier.R; 35 36 /** 37 * Provides common UI for tests that needs to be set as the default dialer. 38 */ 39 public class DefaultDialerChanger { 40 41 private final Activity mActivity; 42 43 private final ImageView mSetDefaultDialerImage; 44 private final Button mSetDefaultDialerButton; 45 46 private final ImageView mRestoreDefaultDialerImage; 47 private final Button mRestoreDefaultDialerButton; 48 49 private boolean mRestorePending; 50 DefaultDialerChanger(Activity activity)51 public DefaultDialerChanger(Activity activity) { 52 mActivity = activity; 53 54 mSetDefaultDialerImage = (ImageView) mActivity.findViewById(R.id.set_default_dialer_image); 55 mRestoreDefaultDialerImage = (ImageView) mActivity 56 .findViewById(R.id.restore_default_dialer_image); 57 58 mSetDefaultDialerButton = (Button) mActivity.findViewById(R.id.set_default_dialer); 59 mRestoreDefaultDialerButton = (Button) mActivity.findViewById(R.id.restore_default_dialer); 60 61 final TelecomManager telecomManager = mActivity.getSystemService(TelecomManager.class); 62 updateSetDefaultDialerState(telecomManager.getDefaultDialerPackage()); 63 64 mSetDefaultDialerButton.setOnClickListener(new OnClickListener() { 65 @Override 66 public void onClick(View v) { 67 if (telecomManager.getDefaultDialerPackage().equals(mActivity.getPackageName())) { 68 Toast.makeText(mActivity, 69 R.string.voicemail_default_dialer_already_set, Toast.LENGTH_SHORT) 70 .show(); 71 return; 72 } 73 74 final RoleManager roleManager = mActivity.getSystemService(RoleManager.class); 75 final Intent intent = roleManager.createRequestRoleIntent(RoleManager.ROLE_DIALER); 76 mActivity.startActivityForResult(intent, 0); 77 } 78 }); 79 80 mRestoreDefaultDialerButton.setOnClickListener(new OnClickListener() { 81 @Override 82 public void onClick(View v) { 83 if (!telecomManager.getDefaultDialerPackage().equals(mActivity.getPackageName())) { 84 Toast.makeText(mActivity, 85 R.string.voicemail_default_dialer_already_restored, Toast.LENGTH_SHORT) 86 .show(); 87 return; 88 } 89 90 final Intent intent = new Intent(Settings.ACTION_MANAGE_DEFAULT_APPS_SETTINGS); 91 mActivity.startActivityForResult(intent, 0); 92 } 93 }); 94 95 mActivity.registerReceiver(mDefaultDialerChangedReceiver, 96 new IntentFilter(TelecomManager.ACTION_DEFAULT_DIALER_CHANGED)); 97 } 98 setRestorePending(boolean value)99 public void setRestorePending(boolean value) { 100 mRestorePending = value; 101 } 102 103 private BroadcastReceiver mDefaultDialerChangedReceiver = new BroadcastReceiver() { 104 @Override 105 public void onReceive(Context context, Intent intent) { 106 String packageName = 107 intent.getStringExtra(TelecomManager.EXTRA_CHANGE_DEFAULT_DIALER_PACKAGE_NAME); 108 if (!mRestorePending) { 109 updateSetDefaultDialerState(packageName); 110 } else { 111 if (packageName.equals(mActivity.getPackageName())) { 112 mRestoreDefaultDialerImage 113 .setImageDrawable(mActivity.getDrawable(R.drawable.fs_indeterminate)); 114 } else { 115 mRestoreDefaultDialerImage 116 .setImageDrawable(mActivity.getDrawable(R.drawable.fs_good)); 117 } 118 } 119 } 120 }; 121 updateSetDefaultDialerState(String packageName)122 private void updateSetDefaultDialerState(String packageName) { 123 if (packageName.equals(mActivity.getPackageName())) { 124 mSetDefaultDialerImage.setImageDrawable(mActivity.getDrawable(R.drawable.fs_good)); 125 } else { 126 mSetDefaultDialerImage 127 .setImageDrawable(mActivity.getDrawable(R.drawable.fs_indeterminate)); 128 } 129 } 130 destroy()131 public void destroy() { 132 mActivity.unregisterReceiver(mDefaultDialerChangedReceiver); 133 } 134 } 135