Home | History | Annotate | Download | only in voicemail
      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.content.BroadcastReceiver;
     21 import android.content.Context;
     22 import android.content.Intent;
     23 import android.content.IntentFilter;
     24 import android.telecom.TelecomManager;
     25 import android.view.View;
     26 import android.view.View.OnClickListener;
     27 import android.widget.Button;
     28 import android.widget.ImageView;
     29 import android.widget.TextView;
     30 import android.widget.Toast;
     31 
     32 import com.android.cts.verifier.R;
     33 
     34 /**
     35  * Provides common UI for tests that needs to be set as the default dialer.
     36  */
     37 public class DefaultDialerChanger {
     38 
     39     private final Activity mActivity;
     40 
     41     private final ImageView mSetDefaultDialerImage;
     42     private final Button mSetDefaultDialerButton;
     43 
     44     private final ImageView mRestoreDefaultDialerImage;
     45     private final Button mRestoreDefaultDialerButton;
     46     private final TextView mRestoreDefaultDialerText;
     47 
     48     private String mOriginalDefaultDialer;
     49 
     50     private boolean mRestorePending;
     51 
     52     public DefaultDialerChanger(Activity activity) {
     53         mActivity = activity;
     54 
     55         mSetDefaultDialerImage = (ImageView) mActivity.findViewById(R.id.set_default_dialer_image);
     56         mRestoreDefaultDialerImage = (ImageView) mActivity
     57                 .findViewById(R.id.restore_default_dialer_image);
     58         mRestoreDefaultDialerText = (TextView) mActivity
     59                 .findViewById(R.id.restore_default_dialer_text);
     60 
     61         mSetDefaultDialerButton = (Button) mActivity.findViewById(R.id.set_default_dialer);
     62         mRestoreDefaultDialerButton = (Button) mActivity.findViewById(R.id.restore_default_dialer);
     63 
     64         final TelecomManager telecomManager = mActivity.getSystemService(TelecomManager.class);
     65         mOriginalDefaultDialer = telecomManager.getDefaultDialerPackage();
     66 
     67         updateSetDefaultDialerState(mOriginalDefaultDialer);
     68         if (mOriginalDefaultDialer.equals(mActivity.getPackageName())) {
     69             // The CTS verifier is already the default dialer (probably due to the tester exiting
     70             // mid test. We don't know what the default dialer should be so just prompt the tester
     71             // to restore it through settings, and remove the button.
     72             mRestoreDefaultDialerText
     73                     .setText(R.string.voicemail_restore_default_dialer_no_default_description);
     74             mRestoreDefaultDialerButton.setVisibility(View.GONE);
     75         }
     76 
     77         mSetDefaultDialerButton.setOnClickListener(new OnClickListener() {
     78             @Override
     79             public void onClick(View v) {
     80                 if (telecomManager.getDefaultDialerPackage().equals(mActivity.getPackageName())) {
     81                     Toast.makeText(mActivity,
     82                             R.string.voicemail_default_dialer_already_set, Toast.LENGTH_SHORT)
     83                             .show();
     84                     return;
     85                 }
     86 
     87                 final Intent intent = new Intent(TelecomManager.ACTION_CHANGE_DEFAULT_DIALER);
     88                 intent.putExtra(TelecomManager.EXTRA_CHANGE_DEFAULT_DIALER_PACKAGE_NAME,
     89                         mActivity.getPackageName());
     90                 mActivity.startActivityForResult(intent, 0);
     91             }
     92         });
     93 
     94         mRestoreDefaultDialerButton.setOnClickListener(new OnClickListener() {
     95             @Override
     96             public void onClick(View v) {
     97                 if (telecomManager.getDefaultDialerPackage().equals(mOriginalDefaultDialer)) {
     98                     Toast.makeText(mActivity,
     99                             R.string.voicemail_default_dialer_already_restored, Toast.LENGTH_SHORT)
    100                             .show();
    101                     return;
    102                 }
    103 
    104                 final Intent intent = new Intent(TelecomManager.ACTION_CHANGE_DEFAULT_DIALER);
    105                 intent.putExtra(TelecomManager.EXTRA_CHANGE_DEFAULT_DIALER_PACKAGE_NAME,
    106                         mOriginalDefaultDialer);
    107                 mActivity.startActivityForResult(intent, 0);
    108             }
    109         });
    110 
    111         mActivity.registerReceiver(mDefaultDialerChangedReceiver,
    112                 new IntentFilter(TelecomManager.ACTION_DEFAULT_DIALER_CHANGED));
    113     }
    114 
    115     public void setRestorePending(boolean value) {
    116         mRestorePending = value;
    117     }
    118 
    119     private BroadcastReceiver mDefaultDialerChangedReceiver = new BroadcastReceiver() {
    120         @Override
    121         public void onReceive(Context context, Intent intent) {
    122             String packageName =
    123                     intent.getStringExtra(TelecomManager.EXTRA_CHANGE_DEFAULT_DIALER_PACKAGE_NAME);
    124             if (!mRestorePending) {
    125                 updateSetDefaultDialerState(packageName);
    126             } else {
    127                 if (packageName.equals(mActivity.getPackageName())) {
    128                     mRestoreDefaultDialerImage
    129                             .setImageDrawable(mActivity.getDrawable(R.drawable.fs_indeterminate));
    130                 } else {
    131                     mRestoreDefaultDialerImage
    132                             .setImageDrawable(mActivity.getDrawable(R.drawable.fs_good));
    133                 }
    134             }
    135         }
    136     };
    137 
    138     private void updateSetDefaultDialerState(String packageName) {
    139         if (packageName.equals(mActivity.getPackageName())) {
    140             mSetDefaultDialerImage.setImageDrawable(mActivity.getDrawable(R.drawable.fs_good));
    141         } else {
    142             mSetDefaultDialerImage
    143                     .setImageDrawable(mActivity.getDrawable(R.drawable.fs_indeterminate));
    144         }
    145     }
    146 
    147     public void destroy() {
    148         mActivity.unregisterReceiver(mDefaultDialerChangedReceiver);
    149     }
    150 }
    151