Index: PRESUBMIT.py |
diff --git a/PRESUBMIT.py b/PRESUBMIT.py |
index 520642ea664fab16705f539995d8eebc408076bb..cd183fcd9182db21a8d759576eef69410dccc5c3 100644 |
--- a/PRESUBMIT.py |
+++ b/PRESUBMIT.py |
@@ -1312,6 +1312,40 @@ def _CheckJavaStyle(input_api, output_api): |
black_list=_EXCLUDED_PATHS + input_api.DEFAULT_BLACK_LIST) |
+def _CheckAndroidToastUsage(input_api, output_api): |
+ """Checks that Chromium code uses org.chromium.ui.widget.Toast |
+ instead of android.widget.Toast (Chromium Toast doesn't force hardware |
+ acceleration on low-end devices, saving memory). |
+ """ |
+ toast_import_pattern = input_api.re.compile( |
+ r'^import android\.widget\.Toast;$') |
+ |
+ import_errors = [] |
+ |
+ sources = lambda x: input_api.FilterSourceFile(x, white_list=(r'.*\.java$',)) |
+ for f in input_api.AffectedSourceFiles(sources): |
+ for line_num, line in f.ChangedContents(): |
+ if toast_import_pattern.search(line): |
+ import_errors.append("%s:%d" % (f.LocalPath(), line_num)) |
+ |
+ results = [] |
+ if import_errors: |
+ results.append(output_api.PresubmitPromptWarning( |
+ '"android.widget.Toast" usage is detected. Android toasts use hardware' |
Dmitry Skiba
2015/08/11 23:49:50
Example output:
** Presubmit Warnings **
"android
|
+ ' acceleration, and can be\ncostly on low-end devices. If your code' |
+ ' triggers toasts on low-end devices (especially during\nnormal' |
+ ' browsing workflow), you should use "org.chromium.ui.widget.Toast"' |
+ ' instead.\n' |
+ "You don't need to bother if toast is shown only from an activity that" |
+ ' is hardware accelerated\n(e.g. Preferences) or the one that is not' |
+ ' visible to the end user (e.g. ChromeShellActivity).\n' |
+ 'In any case, feel free to contact dskiba@chromium.org if you have any' |
+ ' questions or concerns.', |
+ import_errors)) |
+ |
+ return results |
+ |
+ |
def _CheckAndroidCrLogUsage(input_api, output_api): |
"""Checks that new logs using org.chromium.base.Log: |
- Are using 'TAG' as variable name for the tags (warn) |
@@ -1530,6 +1564,7 @@ def _AndroidSpecificOnUploadChecks(input_api, output_api): |
"""Groups checks that target android code.""" |
results = [] |
results.extend(_CheckAndroidCrLogUsage(input_api, output_api)) |
+ results.extend(_CheckAndroidToastUsage(input_api, output_api)) |
return results |