public CharSequence getStatusText(final Context context) {
		final IslandAppInfo app = info();
		final StringBuilder status = new StringBuilder();
		if (! app.isInstalled()) status.append(context.getString(app.isPlaceHolder() ? R.string.status_pending : R.string.status_uninstalled));
		else if (! app.enabled) status.append(context.getString(R.string.status_disabled));
		else if (app.isHidden()) status.append(context.getString(R.string.status_frozen));
		else status.append(context.getString(R.string.status_alive));
		final boolean exclusive = IslandAppListProvider.getInstance(context).isExclusive(app);
		final StringBuilder appendixes = new StringBuilder();
		if (isSystem()) appendixes.append(", ").append(context.getString(R.string.status_appendix_system));
		if (app.isCritical()) appendixes.append(", ").append(context.getString(R.string.status_appendix_critical));
		if (Users.isOwner(app.user)) {
			if (! exclusive) appendixes.append(", ").append(context.getString(R.string.status_appendix_cloned));
		} else if (exclusive) appendixes.append(", ").append(context.getString(R.string.status_appendix_exclusive));
		if (BuildConfig.DEBUG && app.isSuspended()) appendixes.append(", suspended");     // TODO
		if (appendixes.length() > 0) status.append(" (").append(appendixes.substring(2)).append(')');
		return status;
	}
View-model for app entry

Created by Oasis on 2016/2/9.
mobile/src/main/java/com/oasisfeng/island/model/AppViewModel.java