7 Code Standards
M M Arif edited this page 1 month ago

Writing clean and understandable code is GitNex core value from the start. Here are the few standards when writing code for GitNex.

package org.mian.gitnex.adapters;

import android.content.Context;
import android.content.Intent;
import android.graphics.Typeface;
import android.view.LayoutInflater;
import android.view.MenuItem;

/**
 * Author M M Arif
 */

The 1st line in above code is the package class. After that is new blank line and then the import starts. Import packages should not have any blank lines in between.
After import lines there is one more blank line and after that is the author of the template/code.

If you have copied the template code from another file, then the author section should be:

package org.mian.gitnex.adapters;

import android.content.Context;
import android.content.Intent;
import android.graphics.Typeface;
import android.view.LayoutInflater;
import android.view.MenuItem;

/**
 * Template Author M M Arif
 * Author 6543
 */

Next is the main class,

public class ExploreRepositoriesFragment extends Fragment {

    private static String repoNameF = "param2";
    private static String repoOwnerF = "param1";
    private ProgressBar mProgressBar;
    private RecyclerView mRecyclerView;
    private TextView noData;
    private TextView searchKeyword;
    private Boolean repoTypeInclude = true;
    private String sort = "updated";
    private String order = "desc";
    private int limit = 50;
    
}    

Note the blank line before declaring any variables and functions.

Usage of if statements:

if (response.isSuccessful()) {
    assert response.body() != null;
    getReposList(response.body().getSearchedData(), context);
} 
else {
    Log.i("onResponse", String.valueOf(response.code()));
}

Tab or spaces?

GitNex app has used tabs(4 spaces) and it is recommended to use tab for indentation.

Multiple statements

All statements should have proper indentation. Example,

popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
    @Override
    public boolean onMenuItemClick(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.repoStargazers:

                Intent intent = new Intent(context, RepoStargazersActivity.class);
                intent.putExtra("repoFullNameForStars", fullName.getText());
                context.startActivity(intent);
                break;

            case R.id.repoWatchers:

                Intent intentW = new Intent(context, RepoWatchersActivity.class);
                intentW.putExtra("repoFullNameForWatchers", fullName.getText());
                context.startActivity(intentW);
                break;

            case R.id.repoOpenInBrowser:

                Intent intentOpenInBrowser = new Intent(context, OpenRepoInBrowserActivity.class);
                intentOpenInBrowser.putExtra("repoFullNameBrowser", fullName.getText());
                context.startActivity(intentOpenInBrowser);
                break;

        }
        return false;
    }
});

Variable names and scope

Variable names has to be clear for what it is used. Scope should be defined properly for the variable. Example,

private TextView issueNumber;
private ImageView issueAssigneeAvatar;

Layout ID's name

Every layout must have components with defined ID's. Example,

<TextView
    android:id="@+id/branchName"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textColor="@color/white"
    android:textIsSelectable="true"
    android:textSize="18sp" />

<TextView
    android:id="@+id/branchCommitAuthor"
    android:layout_marginTop="10dp"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textIsSelectable="true"
    android:textColor="@color/colorWhite"
    android:textSize="16sp" />

<TextView
    android:id="@+id/branchCommitHash"
    android:layout_marginTop="10dp"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textColor="@color/colorWhite"
    android:textSize="16sp"
    android:textColorLink="@color/lightBlue" />

String names

All the string names in strings.xml must be meaningful. Also check for the string if it is already defined.

<string name="mergePRSuccessMsg">Pull Request was merged successfully</string>
<string name="mergePR404ErrorMsg">Pull Request is not available for merge</string>

Drawables/Icons

GitNex use all the default icons provided with Android Studio licensed under Apache. All drawables are SVG. In case there is no matching resource found in the drawable library, a third party resource can be used under an allowed license for that resource. Resource must be SVG. No gif/png etc are allowed.