blob: 1a9d81fc2571b7f1dafb585b906adc5073ec7cbb [file]
#!/usr/bin/env python3
#
# Copyright 2022 - Google
#
# 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.
import time
from acts.libs.utils.multithread import multithread_func
from acts.libs.utils.multithread import run_multithread_func
from acts_contrib.test_utils.net import ui_utils as uutils
from acts.controllers.android_lib.errors import AndroidDeviceError
from acts_contrib.test_utils.tel.tel_logging_utils import log_screen_shot
from acts_contrib.test_utils.tel.tel_logging_utils import get_screen_shot_log
from acts_contrib.test_utils.tel.tel_logging_utils import get_screen_shot_logs
RESOURCE_ID_ENABLE_CHAT_FEATURE = "com.google.android.apps.messaging:id/switchWidget"
RESOURCE_ID_RCS_SETTINGS = "com.google.android.apps.messaging/.ui.appsettings.RcsSettingsActivity"
RESOURCE_ID_START_CHAT = "com.google.android.apps.messaging:id/start_chat_fab"
def go_to_message_app(ad):
"""Launch message app.
Args:
ad: android devices
Returns:
True if pass; False if fail
"""
ad.log.info("Launch message settings")
ad.adb.shell("am start -n com.google.android.apps.messaging/.ui."
"ConversationListActivity")
log_screen_shot(ad, "launch_msg_settings")
if uutils.has_element(ad, resource_id=RESOURCE_ID_START_CHAT):
return True
else:
return False
def go_to_rcs_settings(ad):
"""Goes to RCS settings.
Args:
ad: android devices
Returns:
True if pass; False if fail
"""
ad.log.info("Go to chat features settings")
ad.adb.shell("am start -n com.google.android.apps.messaging/.ui."
"appsettings.RcsSettingsActivity")
log_screen_shot(ad, "launch_rcs_settings")
if uutils.has_element(ad, text="Chat features"):
return True
else:
return False
def is_rcs_enabled(ad):
"""Checks RCS feature is enabled or not.
Args:
ad: android devices
Returns:
True if RCS is enabled; False if RCS is not enabled
"""
go_to_rcs_settings(ad)
if uutils.has_element(ad, text="Status: Connected", timeout=30):
ad.log.info("RCS is connected")
return True
return False
def enable_chat_feature(ad):
"""Enable chat feature.
Args:
ad: android devices
Returns:
True if pass; False if fail
"""
if not is_rcs_enabled(ad):
ad.log.info("Try to enable chat feature")
go_to_rcs_settings(ad)
time.sleep(2)
if uutils.has_element(ad, resource_id=RESOURCE_ID_ENABLE_CHAT_FEATURE):
uutils.wait_and_click(ad, resource_id=RESOURCE_ID_ENABLE_CHAT_FEATURE,
matching_node=1)
ad.log.info("Click on enable chat features")
time.sleep(2)
log_screen_shot(ad, "enable_chat_feature")
if uutils.has_element(ad, text="Status: Connected", timeout=30):
ad.log.info("RCS status shows connected")
if uutils.has_element(ad, text="Verify your number"):
uutils.wait_and_click(ad, text="Verify your number")
ad.log.info("Click on Verify your number")
time.sleep(2)
log_screen_shot(ad, "verify_number")
if not uutils.has_element(ad, text=ad.phone_number, timeout=30):
uutils.wait_and_input_text(ad, input_text=ad.phone_number)
ad.log.info("input phone number %s", ad.phone_number)
time.sleep(2)
log_screen_shot(ad, "input_phone_num")
# click verify now
if uutils.has_element(ad, text="Verify now"):
uutils.wait_and_click(ad, text="Verify now")
ad.log.info("Click verify now")
time.sleep(2)
log_screen_shot(ad, "verify_now")
# wait for RCS to be enabled
time.sleep(120)
else:
ad.log.info("RCS is already enabled")
if not is_rcs_enabled(ad):
ad.log.info("RCS is not enabled")
return False
return True
def disable_chat_feature(ad):
"""Disable chat feature.
Args:
ad: android devices
Returns:
True if pass; False if fail
"""
go_to_rcs_settings(ad)
time.sleep(2)
log_screen_shot(ad, "before_disable_chat_feature")
if uutils.has_element(ad, text="Status: Connected", timeout=30):
ad.log.info("RCS is connected")
uutils.wait_and_click(ad, resource_id=RESOURCE_ID_ENABLE_CHAT_FEATURE,
matching_node=1)
time.sleep(2)
ad.log.info("Turn off chat features")
if uutils.has_element(ad, text="Turn off", timeout=30):
uutils.wait_and_click(ad, text="Turn off")
time.sleep(2)
log_screen_shot(ad, "after_disable_chat_feature")
return True
else:
ad.log.info("RCS is not connected")
return False
def is_rcs_connected(ad, begin_time=None):
"""search logcat for RCS related message.
Args:
ad: android devices
begin_time: only the lines with time stamps later than begin_time
will be searched.
Returns:
True if found RCS connected message; False if fail
"""
bugle_log_results = ad.search_logcat('BugleRcsEngine', begin_time)
ad.log.info('BugleRcsEngine result %s' %bugle_log_results)
log_results = ad.search_logcat('Enter PublishedState', begin_time)
ad.log.info('Enter PublishedState result %s' %log_results)
if log_results:
ad.log.info("RCS is connected")
return True
return False