**Testing Development Builds** This document describes how to run your development version of lint against some large projects to look for false positives, false negatives and other issues after making nontrivial changes. ## Conventions In the following, `$SRC` refers to your checkout of the lint development branch, normally `studio-main`, and the lint source code is found in `$SRC/tools/base/lint/`. ## Testing against AndroidX To run a development version of lint against the AndroidX tree, first check out AndroidX into `$ANDROIDX`. For checkout instructions, see [their README](https://android.googlesource.com/platform/frameworks/support/+/a ndroidx-main/README.md). Then, build lint into AGP: ```ksh cd $SRC/tools ./gradlew pL ``` (`pL` is short for publishLocal; Gradle allows abbreviations. After making changes to lint only, you can run just `./gradlew pAGL` which is quite a bit faster because it skips some targets that have to be built once but aren't affected by lint-only changes.) We'll need to know the version number of AGP that was built; as of this writing it's 7.1.0-dev, but that will change multiple times a year so you can consult the actual version with something like this: ```ksh $ grep buildVersion $SRC/tools/buildSrc/base/version.properties buildVersion = 7.1.0-dev ``` We'll need to supply a number of override properties, so it's helpful to place this into a shell function: ```ksh runGradleForAndroidX() { CUSTOM_REPO=$ADT_SOURCE_TREE/out/repo \ GRADLE_PLUGIN_VERSION=8.0.0-dev \ LINT_VERSION=31.0.0-dev \ GRADLE_PLUGIN_REPO=$ADT_SOURCE_TREE/out/repo:$ADT_SOURCE_TREE/prebuilts/tools/common/m2/repository \ $ADT_SOURCE_TREE/tools/gradlew --parallel ${@} } alias gwx=runGradleForAndroidX ``` Now you can go to `$ANDROIDX` and run all the lint targets (one for each library): ```ksh gwx lint ``` If you want to debug a particular scenario, replace the `--parallel` flag with `--no-daemon -Dorg.gradle.debug=true`, run the build, and create a Remote configuration in IntelliJ and use it to attach. You can also run `gwx updateLintBaseline` to have lint successfully run all targets and update the baselines and then inspect the diffs if you've added/updated lint checks and don't want it to stop after the first new (and correct) failure. ## Testing against Android Platform Lint is run as part of the Android platform builds, including a number of custom lint checks specific to the platform. The following will refer to the directory containing the Android platform source code as `$ANDROID_SRC`. First, checkout the AOSP platform into `$ANDROID_SRC`: ```ksh mkdir $ANDROID_SRC && cd $ANDROID_SRC repo init -u https://android.googlesource.com/platform/manifest -b master ``` Then create a new branch for testing: ```ksh repo start testing123 . ``` Next, build a development version of lint packaged into a commandline tools component: ```ksh cd $SRC/tools/base export DIST_DIR=/tmp/dist && mkdir -p $DIST_DIR ../buildSrc/servers/build_tools.sh ``` After this step, we'll have `/tmp/dist/commandlinetools_linux.zip` which we now need to insert into the Android platform, with some tweaks: ```ksh cd $ANDROID_SRC/prebuilts/cmdline-tools/ git rm -rf tools unzip $DIST_DIR/commandlinetools_linux.zip mv cmdline-tools tools git add tools ``` There is one deliberate change to the tools for platform usage that we need to preserve, so back out any changes to `tools/bin/lint`: ```ksh cd tools/bin && git reset lint && git restore lint ``` That's it. If you don't have a full Android build environment up and running (or enough diskspace!) you can upload this to gerrit and have the presubmit machinery do a test run: git commit, repo upload, and then mark the CL Presubmit-Ready. Here's an example of a trial balloon CL: [](https://android-review.googlesource.com/c/platform/prebuilts/cmdline-tools/+/1769725) And here's a sample CL of a real lint upgrade which shows some of the other CLs in the topic that were necessary -- updating baselines etc: [](https://android-review.googlesource.com/c/platform/prebuilts/cmdline-tools/+/1746780) If you **do** have an Android build environment, which is helpful if you actually need to debug to figure out why something is going on, run the following target to check lint: ```ksh m lint-check ``` As usual you'll want to run `. build/envsetup.sh` and `lunch sdk-eng` first. If there's a failure, you can look at `out/error.log` where you'll find something like this: ``` ... The failing command was run inside an sbox sandbox in temporary directory out/soong/.temp/sbox/aaa65d9ed8eca15675a35eeb74818d9864690068 The failing command line was: rm -rf ./out/srcjars && mkdir -p ./out/srcjars && ./tools/out/bin/zipsync -d ./out/srcjars -l ./out/srcjars/list -f "*.java" ./out/.intermediates/packages/modules/Permission/PermissionController/PermissionController/android_common_GooglePermissionController_apex30/gen/proto/proto0.srcjar ./out/.intermediates/packages/modules/Permission/PermissionController/PermissionController/android_common_GooglePermissionController_apex30/gen/android/R.srcjar ./out/.intermediates/packages/modules/Permission/PermissionController/PermissionController/android_common_GooglePermissionController_apex30/kapt/kapt-sources.jar ...truncated... ``` Note that the real lint command is prefixed by a few other commands on the same line so search forwards through `&&` until you get to the line which starts with `JAVA_OPTS=` (and lop off the rest after the next `&&` or '||'). Here's a typical invocation that we're left with: ``` JAVA_OPTS="-Xmx3072m --add-opens java.base/java.util=ALL-UNNAMED" ANDROID_SDK_HOME=out/soong/.intermediates/packages/modules/Permission/Pe rmissionController/PermissionController/android_common/lint/home SDK_ANNOTATIONS=./out/lint/annotations.zip LINT_OPTS=-DLINT_API_DATABASE=./out/lint/api_versions.xml ./tools/out/bin/lint --quiet --project ./out/project.xml --config ./out/lint.xml --html ./out/lint-report.html --text ./out/lint-report.txt --xml ./out/lint-report.xml --compile-sdk-version T --java-language-level 1.9 --kotlin-language-level 1.3 --url .=.,out/soong=out --exitcode ``` This means that you can `cd` to the sandbox directory and rerun the given command to repeat just the failing lint invocation, adding some debugging flags and attaching with a debugger as necessary. You can also convert this to a runconfig in IntelliJ for running the lint Main class with the right pwd, environment variables and arguments inside the IDE. ### New Check Fails The platform obviously isn't a real Android app, and some of the checks which apply for apps (such as flagging an import of `android.R` as suspicious) do not apply in platform code. If you've added a new lint check and it's finding false positives in the platform, you may consider just adding it to the exclude list in `build/soong/java/lint_defaults.txt`. ## Other Projects For other projects built with Gradle, you can add a property in your root `gradle.properties` to redirect AGP to use your custom version of lint instead. This is described in more detail in [](../usage/newer-lint.md.html).


Peaky Blinders to politics: Helen McCrory joins cast of BBC thriller Roadkill
Helen McCrory will play the prime minister in a new political thriller on BBC One.
The Peaky Blinders star will play PM Dawn Ellison in Roadkill, a four-part fictional series written by Sir David Hare, which “explores the relationship between personal morality and political power”.
McCrory is joining previously confirmed cast member Hugh Laurie, who will play a “charismatic” Conservative minister.
The cast will also include Saskia Reeves (Us, The Child In Time) Sarah Greene (Dublin Murders, Normal People), Patricia Hodge (A Very English Scandal, Miranda) and Ophelia Lovibond (WIA).
McCrory, 51, is known for her role as Polly Gray, the aunt of Cillian Murphy’s character Tommy Shelby, in hit drama Peaky Blinders, and she also recently appeared in BBC Two drama MotherFatherSon opposite Richard Gere.
She has appeared in the Harry Potter films, Skyfall, The Queen and TV series Penny Dreadful.
Screenwriter and playwright Sir David, known for the films Collateral, The Reader and The Hours, said: “The casting of Roadkill illustrates the extraordinary depth and range newly on show in British film acting. Hugh Laurie is leading a great ensemble.”
Laurie will play Peter Laurence, a self-made, forceful and charismatic Tory MP whose public and private lives appear to be falling apart at the hands of his enemies.
As the personal revelations spiral, Peter is shamelessly untroubled by guilt or remorse, skilfully walking the thin line between glory and catastrophe as he looks to further his own agenda while others plot to bring him down.
But it becomes apparent how difficult it is, for both an individual and a country, to leave the past behind, and Peter must attempt to outrun his own secrets to win the ultimate prize.
Roadkill is a co-production between BBC One and Masterpiece on PBS in the US.


{% extends 'demo/base.html' %} {% block inner_content %}
Hello, world! This is the demo page for great-components. From here you can preview all the components and styling that can be used when you import this module.


Data tables display sets of raw data. They usually appear in desktop enterprise products.
Data tables may be embedded on a surface, such as a card. They can include:
Data tables on cards may display navigation and data manipulation tools at the top and bottom.
A data table contains a header row at the top that lists column names, followed by rows for data.
Checkboxes should accompany each row if the user needs to select or manipulate data.
Data tables may include:
Data tables on cards may display navigation and data manipulation tools at the top and bottom.
Basic data table
13sp Roboto Regular
87% black
12sp Roboto Medium
54% black
Right-aligned numeric columns
Left-aligned text columns
Display a background in a table row if a user hovers over any part of that row. If there are separate hover states on individual table cells, display both the hover state of the cell and row at the same time.
Hovering over a row
When a row is selected, display a background color on the row.
A selected table row
If column sorting is enabled, sort the most important data by default and display a sorted state in the column header. If the user clicks on a column that is already sorted, reverse the sort order and rotate the sort icon.
Table with an ascending sorted column
If there is a need to provide definitions to column headers, display a tooltip on hover. If sorting is enabled, display a light sort icon upon hover, which indicates that the column is sortable.
Hovering over a column name
Sometimes, column names don’t fit in a container with the recommended 56dp of padding in between columns. There are two options to handle this:
Long column names truncated with an ellipse
Hovering over a truncated column name
Tables may require basic text editing (e.g. for editing existing text content, or adding comments). Include editable fields within a table and denote them using placeholder text. You can use a simple edit dialog with just a text field, or display a full dialog component on click.
An editable table cell with placeholder text
A simple, one-field edit dialog
A complex, flexible edit dialog
(Optional) Icon-based edit affordance. Include icons at the edge of the cell on the opposite side of the content.
Instead of editing text, users may need to select from a predefined list of options. In this scenario, embed a menu component directly in the table.
A table with inline menus
An expanded inline menu
Tables may be embedded within a card, with table navigation and data manipulation tools displayed at the top and bottom.
Table card with header and footer
20sp Roboto Regular
87% black
24dp container
54% black
12sp Roboto Regular
54% black
Some table cards may require headers with actions instead of titles. In this case you may either:
Alternate headers for a table card
Use borderless buttons
Enable upon item selection
Use 50-value of secondary app color for background fill
Display the number of items selected
Display available contextual icons upon item selection
Vertical spacing of a data table card and its last row
Horizontal padding between elements in a table card
Padding in between columns


We take all manner of questions, suggestions, and bug reports. Feel free to open an issue regarding anything and it’ll get looked at! If you have a bug report, please include a jsfiddle!
Please accompany all pull requests with the following (where appropriate):
Additionally, when you are ready to submit your PR, please rebase your commits so they’re easier to examine!
Also, please note, your code will not be merged if it does not pass our CI test. Thanks for your contribution!


--- layout: page title: "About" description: "Student - Transportation - Volunteer" header-img: "img/post-bg-rwd.jpg" multilingual: true ---
求知若渴，虚心若愚。
你好，我叫史歌，刚刚成年，还是个小学生，人生的精彩还等着我们去探索。
这个博客用来分享我对未来生活的探索，和我认为的有趣的事物。
有趣太不易了，做个有趣的人吧！
有趣的人想和我讨论人生的话，欢迎关注我下面的社交媒体，或者电子邮件联系我<EMAIL_ADDRESS>"Remember to let her into your heart,
Then you can start to make it better."
Hi, I am Ge Shi. I am intended to apply for 2019Fall Ph.D. in civil engineering. Cotact me<EMAIL_ADDRESS>Educational Experience
University of Wisconsin-Madison, 09/2017-08/2018
Master of Science, Civil Engineering (Transportation)
Chongqing Jiaotong University, 09/2013-07/2017
Bachelor of Engineering, Traffic and Transportation (Transportation and Logistics)


WaylandSurface QML Type
Represents a rectangular area on an output device. More...
| Import Statement: | import QtWayland.Compositor 1.0 |
| Since: | Qt 5.8 |
Properties
- bufferScale : size
- client : object
- contentOrientation : enum
- cursorSurface : bool
- hasContent : bool
- origin : enum
- size : size
Signals
- void dragStarted(object drag)
Methods
- void destroy()
- void initialize(object compositor, object client, int id, int version)
- bool isDestroyed()
Detailed Description
This type encapsulates a rectangular area of pixels that is displayed on an output device. It corresponds to the interface wl_surface
in the Wayland protocol.
Property Documentation
bufferScale : size |
This property holds the WaylandSurface's buffer scale. The buffer scale lets a client supply higher resolution buffer data for use on high resolution outputs.
This property holds the client using this WaylandSurface.
This property holds the orientation of the WaylandSurface's contents.
See also WaylandOutput.transform.
This property holds whether the WaylandSurface is a cursor surface.
This property holds whether the WaylandSurface has content.
This property holds the origin of the WaylandSurface's buffer, or WaylandSurface.OriginTopLeft if the surface has no buffer.
It can have the following values:
- WaylandSurface.OriginTopLeft The origin is the top left corner of the buffer.
- WaylandSurface.OriginBottomLeft The origin is the bottom left corner of the buffer.
size : size |
This property holds the WaylandSurface's size in pixels.
Signal Documentation
Method Documentation
Destroys the WaylandSurface.
Initializes the WaylandSurface with the given compositor and client, and with the given id and version.
Returns true
if the WaylandSurface has been destroyed. Otherwise returns false
.