Skip to content

Commit

Permalink
Fix #97 - Add AndroidStyle.xml code style template and apply this tem…
Browse files Browse the repository at this point in the history
…plate to the project via Android Studio. Update Readme and Contribution docs to reflect the new official style guide and template.
  • Loading branch information
barbeau committed Jan 22, 2014
1 parent 8bc71a5 commit 93e6447
Show file tree
Hide file tree
Showing 257 changed files with 4,537 additions and 3,025 deletions.
175 changes: 175 additions & 0 deletions AndroidStyle.xml
@@ -0,0 +1,175 @@
<?xml version="1.0" encoding="UTF-8"?>
<code_scheme name="AndroidStyle">
<option name="JAVA_INDENT_OPTIONS">
<value>
<option name="INDENT_SIZE" value="4"/>
<option name="CONTINUATION_INDENT_SIZE" value="8"/>
<option name="TAB_SIZE" value="8"/>
<option name="USE_TAB_CHARACTER" value="false"/>
<option name="SMART_TABS" value="false"/>
<option name="LABEL_INDENT_SIZE" value="0"/>
<option name="LABEL_INDENT_ABSOLUTE" value="false"/>
<option name="USE_RELATIVE_INDENTS" value="false"/>
</value>
</option>
<option name="FIELD_NAME_PREFIX" value="m"/>
<option name="STATIC_FIELD_NAME_PREFIX" value="m"/>
<option name="CLASS_COUNT_TO_USE_IMPORT_ON_DEMAND" value="9999"/>
<option name="NAMES_COUNT_TO_USE_IMPORT_ON_DEMAND" value="9999"/>
<option name="IMPORT_LAYOUT_TABLE">
<value>
<package name="com.google" withSubpackages="true" static="false"/>
<emptyLine/>
<package name="com" withSubpackages="true" static="false"/>
<emptyLine/>
<package name="junit" withSubpackages="true" static="false"/>
<emptyLine/>
<package name="net" withSubpackages="true" static="false"/>
<emptyLine/>
<package name="org" withSubpackages="true" static="false"/>
<emptyLine/>
<package name="android" withSubpackages="true" static="false"/>
<emptyLine/>
<package name="java" withSubpackages="true" static="false"/>
<emptyLine/>
<package name="javax" withSubpackages="true" static="false"/>
<emptyLine/>
<package name="" withSubpackages="true" static="false"/>
<emptyLine/>
<package name="" withSubpackages="true" static="true"/>
</value>
</option>
<option name="RIGHT_MARGIN" value="100"/>
<option name="JD_P_AT_EMPTY_LINES" value="false"/>
<option name="JD_DO_NOT_WRAP_ONE_LINE_COMMENTS" value="true"/>
<option name="JD_KEEP_EMPTY_PARAMETER" value="false"/>
<option name="JD_KEEP_EMPTY_EXCEPTION" value="false"/>
<option name="JD_KEEP_EMPTY_RETURN" value="false"/>
<option name="JD_PRESERVE_LINE_FEEDS" value="true"/>
<option name="KEEP_CONTROL_STATEMENT_IN_ONE_LINE" value="false"/>
<option name="KEEP_BLANK_LINES_IN_CODE" value="1"/>
<option name="BLANK_LINES_AROUND_FIELD" value="1"/>
<option name="BLANK_LINES_AFTER_CLASS_HEADER" value="1"/>
<option name="ALIGN_MULTILINE_PARAMETERS" value="false"/>
<option name="ALIGN_MULTILINE_FOR" value="false"/>
<option name="CALL_PARAMETERS_WRAP" value="1"/>
<option name="METHOD_PARAMETERS_WRAP" value="1"/>
<option name="EXTENDS_LIST_WRAP" value="1"/>
<option name="THROWS_LIST_WRAP" value="1"/>
<option name="EXTENDS_KEYWORD_WRAP" value="1"/>
<option name="THROWS_KEYWORD_WRAP" value="1"/>
<option name="METHOD_CALL_CHAIN_WRAP" value="1"/>
<option name="BINARY_OPERATION_WRAP" value="1"/>
<option name="BINARY_OPERATION_SIGN_ON_NEXT_LINE" value="true"/>
<option name="TERNARY_OPERATION_WRAP" value="1"/>
<option name="TERNARY_OPERATION_SIGNS_ON_NEXT_LINE" value="true"/>
<option name="FOR_STATEMENT_WRAP" value="1"/>
<option name="ARRAY_INITIALIZER_WRAP" value="1"/>
<option name="ASSIGNMENT_WRAP" value="1"/>
<option name="PLACE_ASSIGNMENT_SIGN_ON_NEXT_LINE" value="true"/>
<option name="WRAP_COMMENTS" value="true"/>
<option name="IF_BRACE_FORCE" value="3"/>
<option name="DOWHILE_BRACE_FORCE" value="3"/>
<option name="WHILE_BRACE_FORCE" value="3"/>
<option name="FOR_BRACE_FORCE" value="3"/>
<ADDITIONAL_INDENT_OPTIONS fileType="css">
<option name="INDENT_SIZE" value="4"/>
<option name="CONTINUATION_INDENT_SIZE" value="8"/>
<option name="TAB_SIZE" value="4"/>
<option name="USE_TAB_CHARACTER" value="false"/>
<option name="SMART_TABS" value="false"/>
<option name="LABEL_INDENT_SIZE" value="0"/>
<option name="LABEL_INDENT_ABSOLUTE" value="false"/>
<option name="USE_RELATIVE_INDENTS" value="false"/>
</ADDITIONAL_INDENT_OPTIONS>
<ADDITIONAL_INDENT_OPTIONS fileType="java">
<option name="INDENT_SIZE" value="4"/>
<option name="CONTINUATION_INDENT_SIZE" value="8"/>
<option name="TAB_SIZE" value="8"/>
<option name="USE_TAB_CHARACTER" value="false"/>
<option name="SMART_TABS" value="false"/>
<option name="LABEL_INDENT_SIZE" value="0"/>
<option name="LABEL_INDENT_ABSOLUTE" value="false"/>
<option name="USE_RELATIVE_INDENTS" value="false"/>
</ADDITIONAL_INDENT_OPTIONS>
<ADDITIONAL_INDENT_OPTIONS fileType="js">
<option name="INDENT_SIZE" value="4"/>
<option name="CONTINUATION_INDENT_SIZE" value="4"/>
<option name="TAB_SIZE" value="4"/>
<option name="USE_TAB_CHARACTER" value="false"/>
<option name="SMART_TABS" value="false"/>
<option name="LABEL_INDENT_SIZE" value="0"/>
<option name="LABEL_INDENT_ABSOLUTE" value="false"/>
<option name="USE_RELATIVE_INDENTS" value="false"/>
</ADDITIONAL_INDENT_OPTIONS>
<ADDITIONAL_INDENT_OPTIONS fileType="jsp">
<option name="INDENT_SIZE" value="4"/>
<option name="CONTINUATION_INDENT_SIZE" value="8"/>
<option name="TAB_SIZE" value="4"/>
<option name="USE_TAB_CHARACTER" value="false"/>
<option name="SMART_TABS" value="false"/>
<option name="LABEL_INDENT_SIZE" value="0"/>
<option name="LABEL_INDENT_ABSOLUTE" value="false"/>
<option name="USE_RELATIVE_INDENTS" value="false"/>
</ADDITIONAL_INDENT_OPTIONS>
<ADDITIONAL_INDENT_OPTIONS fileType="sql">
<option name="INDENT_SIZE" value="2"/>
<option name="CONTINUATION_INDENT_SIZE" value="8"/>
<option name="TAB_SIZE" value="4"/>
<option name="USE_TAB_CHARACTER" value="false"/>
<option name="SMART_TABS" value="false"/>
<option name="LABEL_INDENT_SIZE" value="0"/>
<option name="LABEL_INDENT_ABSOLUTE" value="false"/>
<option name="USE_RELATIVE_INDENTS" value="false"/>
</ADDITIONAL_INDENT_OPTIONS>
<ADDITIONAL_INDENT_OPTIONS fileType="xml">
<option name="INDENT_SIZE" value="4"/>
<option name="CONTINUATION_INDENT_SIZE" value="8"/>
<option name="TAB_SIZE" value="4"/>
<option name="USE_TAB_CHARACTER" value="false"/>
<option name="SMART_TABS" value="false"/>
<option name="LABEL_INDENT_SIZE" value="0"/>
<option name="LABEL_INDENT_ABSOLUTE" value="false"/>
<option name="USE_RELATIVE_INDENTS" value="false"/>
</ADDITIONAL_INDENT_OPTIONS>
<ADDITIONAL_INDENT_OPTIONS fileType="yml">
<option name="INDENT_SIZE" value="2"/>
<option name="CONTINUATION_INDENT_SIZE" value="8"/>
<option name="TAB_SIZE" value="4"/>
<option name="USE_TAB_CHARACTER" value="false"/>
<option name="SMART_TABS" value="false"/>
<option name="LABEL_INDENT_SIZE" value="0"/>
<option name="LABEL_INDENT_ABSOLUTE" value="false"/>
<option name="USE_RELATIVE_INDENTS" value="false"/>
</ADDITIONAL_INDENT_OPTIONS>
<codeStyleSettings language="JavaScript">
<option name="KEEP_CONTROL_STATEMENT_IN_ONE_LINE" value="false"/>
<option name="KEEP_BLANK_LINES_IN_CODE" value="1"/>
<option name="BLANK_LINES_AROUND_FIELD" value="1"/>
<option name="BLANK_LINES_AFTER_CLASS_HEADER" value="1"/>
<option name="ALIGN_MULTILINE_PARAMETERS" value="false"/>
<option name="ALIGN_MULTILINE_FOR" value="false"/>
<option name="CALL_PARAMETERS_WRAP" value="1"/>
<option name="METHOD_PARAMETERS_WRAP" value="1"/>
<option name="EXTENDS_LIST_WRAP" value="1"/>
<option name="THROWS_LIST_WRAP" value="1"/>
<option name="EXTENDS_KEYWORD_WRAP" value="1"/>
<option name="THROWS_KEYWORD_WRAP" value="1"/>
<option name="METHOD_CALL_CHAIN_WRAP" value="1"/>
<option name="BINARY_OPERATION_WRAP" value="1"/>
<option name="BINARY_OPERATION_SIGN_ON_NEXT_LINE" value="true"/>
<option name="TERNARY_OPERATION_WRAP" value="1"/>
<option name="TERNARY_OPERATION_SIGNS_ON_NEXT_LINE" value="true"/>
<option name="FOR_STATEMENT_WRAP" value="1"/>
<option name="ARRAY_INITIALIZER_WRAP" value="1"/>
<option name="ASSIGNMENT_WRAP" value="1"/>
<option name="PLACE_ASSIGNMENT_SIGN_ON_NEXT_LINE" value="true"/>
<option name="WRAP_COMMENTS" value="true"/>
<option name="IF_BRACE_FORCE" value="3"/>
<option name="DOWHILE_BRACE_FORCE" value="3"/>
<option name="WHILE_BRACE_FORCE" value="3"/>
<option name="FOR_BRACE_FORCE" value="3"/>
<option name="PARENT_SETTINGS_INSTALLED" value="true"/>
</codeStyleSettings>
</code_scheme>

20 changes: 16 additions & 4 deletions CONTRIBUTING.md
Expand Up @@ -2,6 +2,17 @@

This guide details how to use issues and pull requests (for new code) to improve OneBusAway for Android.

## Code Style and Template

We use the [Android Open-Source Project (AOSP](http://source.android.com/source/code-style.html) Code Style Guidelines.

We strongly suggest that you use the `AndroidStyle.xml` template file, included in this repository, in Android Studio to format your code:

1. Place `AndroidStyle.xml` in your Android Studio `/codestyles` directory (e.g., `C:\Users\barbeau\.AndroidStudioPreview\config\codestyles`)
2. Restart Android Studio.
3. Go to "File->Settings->Code Style", and under "Scheme" select "AndroidStyle" and click "Ok".
4. Right-click on the files that contain your contributions and select "Reformat Code", check "Optimize imports", and select "Run".

## Closing policy for issues and pull requests

OneBusAway for Android is a popular project and the capacity to deal with issues and pull requests is limited. Out of respect for our volunteers, issues and pull requests not in line with the guidelines listed in this document may be closed without notice.
Expand Down Expand Up @@ -37,10 +48,11 @@ If you can, please submit a pull request with the fix or improvements including
1. Fork the project on GitHub
2. Create a feature branch
3. Write tests and code
4. If you have multiple commits please combine them into one commit by [squashing them](http://git-scm.com/book/en/Git-Tools-Rewriting-History#Squashing-Commits)
5. Push the commit to your fork
6. Submit a pull request with a motive for your change and the method you used to achieve it
7. [Search for issues](https://github.com/OneBusAway/onebusaway-android/search?q=&ref=cmdform&type=Issues) related to your pull request and mention them in the pull request description or comments
4. Apply the `AndroidStyle.xml` style template to your code in Android Studio.
5. If you have multiple commits please combine them into one commit by [squashing them](http://git-scm.com/book/en/Git-Tools-Rewriting-History#Squashing-Commits)
6. Push the commit to your fork
7. Submit a pull request with a motive for your change and the method you used to achieve it
8. [Search for issues](https://github.com/OneBusAway/onebusaway-android/search?q=&ref=cmdform&type=Issues) related to your pull request and mention them in the pull request description or comments

We will accept pull requests if:

Expand Down
4 changes: 4 additions & 0 deletions README.md
Expand Up @@ -50,6 +50,10 @@ key.alias=<key_alias_name>

Note that the paths in these files always use the Unix path separator `/`, even on Windows. If you use the Windows path separator `\` you will get the error `No value has been specified for property 'signingConfig.keyAlias'.`

### Contributing

We welcome contributions to the project! Please see our [Contributing Guide](https://github.com/OneBusAway/onebusaway-android/blob/master/CONTRIBUTING.md) for details, including Code Style Guidelines and Template.

## Troubleshooting

### When importing to Android Studio, I get an error "You are using an old, unsupported version of Gradle..."
Expand Down
2 changes: 1 addition & 1 deletion onebusaway-android/build.gradle
Expand Up @@ -84,7 +84,7 @@ task askForPasswords << {
// Must create String because System.readPassword() returns char[]
// (and assigning that below fails silently)
def storePw = new String(System.console().readPassword("\nKeystore password: "))
def keyPw = new String(System.console().readPassword("Key password: "))
def keyPw = new String(System.console().readPassword("Key password: "))

android.signingConfigs.release.storePassword = storePw
android.signingConfigs.release.keyPassword = keyPw
Expand Down
Expand Up @@ -27,11 +27,15 @@
import java.net.HttpURLConnection;

public class MockConnection implements ObaConnection {

private static final String TAG = "MockConnection";

private final MockConnectionFactory.UriMap mUriMap;

private final Context mContext;

private final Uri mUri;

private int mResponseCode = HttpURLConnection.HTTP_OK;

MockConnection(Context context,
Expand Down
Expand Up @@ -28,9 +28,11 @@
import java.util.TreeSet;

public class MockConnectionFactory implements ObaConnectionFactory {

private final Context mContext;

public static class UriMap {

private HashMap<String, String> uris;

public String getUri(Uri uri) {
Expand Down Expand Up @@ -58,7 +60,7 @@ public String getUri(Uri uri) {

private String normalizeUri(Uri uri) {
Uri.Builder builder = new Uri.Builder()
.encodedPath(uri.getEncodedPath());
.encodedPath(uri.getEncodedPath());
// getQueryParameterNames returns an unmodifiable set.
// In any case, we need the parameters in sorted order
TreeSet<String> params = new TreeSet<String>(UriCompat.getQueryParameterNames(uri));
Expand All @@ -70,6 +72,7 @@ private String normalizeUri(Uri uri) {
return builder.build().toString();
}
}

private final UriMap mUriMap;

public MockConnectionFactory(Context context) {
Expand Down
Expand Up @@ -21,7 +21,9 @@
import android.content.Context;

public class ObaMock {

private final MockConnectionFactory mMockFactory;

private final ObaConnectionFactory mOldFactory;

public ObaMock(Context context) {
Expand Down
Expand Up @@ -26,6 +26,7 @@
import java.io.Reader;

public class Resources {

private static final Uri TEST_RAW_URI =
Uri.parse("android.resource://com.joulespersecond.seattlebusbot.test/raw/");

Expand Down
Expand Up @@ -25,7 +25,8 @@
import java.util.Set;

public class UriCompat {
@TargetApi(value=11)

@TargetApi(value = 11)
public static Set<String> getQueryParameterNames(Uri uri) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
return uri.getQueryParameterNames();
Expand Down
Expand Up @@ -15,16 +15,17 @@
*/
package com.joulespersecond.oba.provider.test;

import com.joulespersecond.oba.provider.ObaContract;
import com.joulespersecond.oba.provider.ObaProvider;

import android.content.ContentResolver;
import android.content.ContentValues;
import android.database.Cursor;
import android.net.Uri;
import android.test.ProviderTestCase2;

import com.joulespersecond.oba.provider.ObaContract;
import com.joulespersecond.oba.provider.ObaProvider;

public class ProviderTest extends ProviderTestCase2<ObaProvider> {

public ProviderTest() {
super(ObaProvider.class, ObaContract.AUTHORITY);
}
Expand Down Expand Up @@ -60,7 +61,7 @@ public void testStops() {
// Read
//
Cursor c = cr.query(ObaContract.Stops.CONTENT_URI,
new String[] { ObaContract.Stops._ID, ObaContract.Stops.DIRECTION },
new String[]{ObaContract.Stops._ID, ObaContract.Stops.DIRECTION},
null, null, null);
assertNotNull(c);
assertTrue(c.getCount() == 1);
Expand All @@ -70,15 +71,15 @@ public void testStops() {

// Test counting
c = cr.query(ObaContract.Stops.CONTENT_URI,
new String[] { ObaContract.Stops._COUNT },
new String[]{ObaContract.Stops._COUNT},
null, null, null);
assertNotNull(c);
assertEquals(c.getCount(), 1);
c.moveToNext();
assertTrue(c.getInt(0) == 1);
c.close();
// Get the one that we care about
c = cr.query(uri, new String[] { ObaContract.Stops.CODE }, null, null, null);
c = cr.query(uri, new String[]{ObaContract.Stops.CODE}, null, null, null);
assertNotNull(c);
assertEquals(c.getCount(), 1);
c.moveToNext();
Expand Down Expand Up @@ -126,7 +127,7 @@ public void testLimit() {
assertNotNull(uri);

Cursor c = cr.query(ObaContract.Stops.CONTENT_URI,
new String[] { ObaContract.Stops._COUNT },
new String[]{ObaContract.Stops._COUNT},
null, null, null);
assertNotNull(c);
assertEquals(c.getCount(), 1);
Expand All @@ -135,10 +136,10 @@ public void testLimit() {
c.close();

c = cr.query(ObaContract.Stops.CONTENT_URI
.buildUpon()
.appendQueryParameter("limit", "1")
.build(),
new String[] { ObaContract.Stops._ID },
.buildUpon()
.appendQueryParameter("limit", "1")
.build(),
new String[]{ObaContract.Stops._ID},
null, null, null);
assertNotNull(c);
assertEquals(c.getCount(), 1);
Expand Down

0 comments on commit 93e6447

Please sign in to comment.