package com.buddycloud; import java.io.IOException; import java.util.LinkedList; import java.util.List; import org.apache.commons.io.IOUtils; import android.content.Context; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.text.SpannableString; import android.text.Spanned; import android.text.method.LinkMovementMethod; import android.text.style.ClickableSpan; import android.text.style.ForegroundColorSpan; import android.text.style.UnderlineSpan; import android.util.TypedValue; import android.view.LayoutInflater; import android.view.View; import android.widget.LinearLayout; import android.widget.LinearLayout.LayoutParams; import android.widget.TextView; import com.actionbarsherlock.app.SherlockActivity; import com.actionbarsherlock.view.MenuItem; import com.buddycloud.log.Logger; import com.buddycloud.utils.ActionbarUtil; import com.buddycloud.utils.VersionUtils; public class AboutBuddycloudActivity extends SherlockActivity { private static final String TAG = AboutBuddycloudActivity.class.getSimpleName(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_about_buddycloud); ActionbarUtil.showActionBarwithBack(this, getString(R.string.pref_about_bc_title)); Uri contributorsUri = Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.contributors); List<String> contributors = new LinkedList<String>(); try { contributors = IOUtils.readLines(getContentResolver().openInputStream( contributorsUri)); } catch (IOException e) { Logger.error(TAG, "Error msg ", e); } LinearLayout contributorFrame = (LinearLayout) findViewById(R.id.contributorsFrame); for (String c : contributors) { String[] contribtorInfo = c.split("-"); if (contribtorInfo.length >= 2) { TextView contributorTxt = getContributorsView(getApplicationContext(), contribtorInfo[0], contribtorInfo[1]); int margin = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 10, getResources().getDisplayMetrics()); LinearLayout.LayoutParams llp = new LinearLayout.LayoutParams( LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); llp.setMargins(0, margin, 0, margin); contributorTxt.setLayoutParams(llp); contributorFrame.addView(contributorTxt); } } final TextView versionTxt = (TextView) findViewById(R.id.versionTxt); versionTxt.setText(VersionUtils.getVersionName(getApplicationContext())); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: finish(); return true; default: return super.onOptionsItemSelected(item); } } /** * Get the contributor text view * * @param context * @param contributor * @param githubAuthor * @return */ private TextView getContributorsView(final Context context, final String contributor, final String githubAuthor) { if (contributor == null || githubAuthor == null) return null; final String githubUri = "http://github.com/" + githubAuthor.trim(); final String contributorInfo = contributor.trim() + "\n" + "@" + githubAuthor.trim(); TextView tv = (TextView)View.inflate(context, R.layout.contributors, null); SpannableString hyperLinkSpan = new SpannableString(contributorInfo); hyperLinkSpan.setSpan(new ForegroundColorSpan(getResources().getColor(R.color.bc_about_contributor_link_color)), contributorInfo.indexOf("@"), hyperLinkSpan.length(), 0); hyperLinkSpan.setSpan(new ClickableSpan() { @Override public void onClick(View widget) { Intent intent = new Intent(Intent.ACTION_VIEW); intent.setData(Uri.parse(githubUri)); startActivity(intent); } }, contributorInfo.indexOf("@"), hyperLinkSpan.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); hyperLinkSpan.setSpan(new UnderlineSpan(), contributorInfo.indexOf("@"), hyperLinkSpan.length(), 0); tv.setText(hyperLinkSpan); tv.setMovementMethod(LinkMovementMethod.getInstance()); return tv; } }