TextView versionSecurityPatchTextView = (TextView) tabLayout.findViewById(R.id.about_version_securitypatch);
TextView versionWebKitTextView = (TextView) tabLayout.findViewById(R.id.about_version_webkit);
TextView versionChromeTextView = (TextView) tabLayout.findViewById(R.id.about_version_chrome);
+ TextView versionOrbotTextView = (TextView) tabLayout.findViewById(R.id.about_version_orbot);
TextView certificateIssuerDNTextView = (TextView) tabLayout.findViewById(R.id.about_version_certificate_issuer_dn);
TextView certificateSubjectDNTextView = (TextView) tabLayout.findViewById(R.id.about_version_certificate_subject_dn);
TextView certificateStartDateTextView = (TextView) tabLayout.findViewById(R.id.about_version_certificate_start_date);
// Select the substring that begins after "Chrome/" and goes until the next " ".
String chrome = userAgentString.substring(userAgentString.indexOf("Chrome/") + 7, userAgentString.indexOf(" ", userAgentString.indexOf("Chrome/")));
- // Create a `SpannableStringBuilder` for each `TextView` that needs multiple colors of text.
+ // Get the Orbot version name if Orbot is installed.
+ String orbot;
+ try {
+ // Store the version name.
+ orbot = getContext().getPackageManager().getPackageInfo("org.torproject.android", PackageManager.GET_CONFIGURATIONS).versionName;
+ } catch (PackageManager.NameNotFoundException e) { // Orbot is not installed.
+ orbot = "";
+ }
+
+ // Create a `SpannableStringBuilder` for the hardware and software `TextViews` that needs multiple colors of text.
SpannableStringBuilder brandStringBuilder = new SpannableStringBuilder(brandLabel + brand);
SpannableStringBuilder manufacturerStringBuilder = new SpannableStringBuilder(manufacturerLabel + manufacturer);
SpannableStringBuilder modelStringBuilder = new SpannableStringBuilder(modelLabel + model);
SpannableStringBuilder securityPatchStringBuilder = new SpannableStringBuilder(securityPatchLabel + securityPatch);
securityPatchStringBuilder.setSpan(blueColorSpan, securityPatchLabel.length(), securityPatchStringBuilder.length(), Spanned.SPAN_INCLUSIVE_INCLUSIVE);
versionSecurityPatchTextView.setText(securityPatchStringBuilder);
- } else { // Hide `versionSecurityPatchTextView`.
+ } else { // SDK_INT < 23, so `versionSecurityPatchTextView` should be hidden.
versionSecurityPatchTextView.setVisibility(View.GONE);
}
SpannableStringBuilder radioStringBuilder = new SpannableStringBuilder(radioLabel + radio);
radioStringBuilder.setSpan(blueColorSpan, radioLabel.length(), radioStringBuilder.length(), Spanned.SPAN_INCLUSIVE_INCLUSIVE);
versionRadioTextView.setText(radioStringBuilder);
- } else { // Hide `versionRadioTextView`.
+ } else { // This device does not have a radio, so `versionRadioTextView` should be hidden.
versionRadioTextView.setVisibility(View.GONE);
}
+ // Only populate `versionOrbotTextView` if Orbot is installed.
+ if (!orbot.equals("")) {
+ String orbotLabel = getString(R.string.orbot) + " ";
+ SpannableStringBuilder orbotStringBuilder = new SpannableStringBuilder(orbotLabel + orbot);
+ orbotStringBuilder.setSpan(blueColorSpan, orbotLabel.length(), orbotStringBuilder.length(), Spanned.SPAN_INCLUSIVE_INCLUSIVE);
+ versionOrbotTextView.setText(orbotStringBuilder);
+ } else { // Orbot is not installed, so the `versionOrbotTextView` should be hidden.
+ versionOrbotTextView.setVisibility(View.GONE);
+ }
+
// Display the package signature.
try {
// Get the first package signature. Suppress the lint warning about the need to be careful in implementing comparison of certificates for security purposes.
which isn't needed in this case because the `ImageView` is only decorative. -->
<ImageView
android:id="@+id/about_version_icon"
- android:layout_width="wrap_content"
android:layout_height="wrap_content"
+ android:layout_width="wrap_content"
android:src="@mipmap/privacy_browser"
android:paddingTop="10dp"
tools:ignore="ContentDescription" />
<TextView
android:id="@+id/about_version_privacy_browser_textview"
- android:layout_width="wrap_content"
android:layout_height="wrap_content"
+ android:layout_width="wrap_content"
android:text="@string/privacy_browser"
android:textStyle="bold"
android:textSize="22sp"
<TextView
android:id="@+id/about_version_number"
- android:layout_width="wrap_content"
android:layout_height="wrap_content"
+ android:layout_width="wrap_content"
android:textColor="@color/blue_700"
android:layout_below="@id/about_version_privacy_browser_textview"
android:layout_toEndOf="@id/about_version_icon" />
<!-- The purpose of this `LinearLayout` is to provide padding on the start of the `TextViews` to make them line up with `about_version_icon`.
Although we don't need it, we have to include `android:paddingEnd` to make lint happy. -->
<LinearLayout
- android:layout_width="match_parent"
android:layout_height="wrap_content"
+ android:layout_width="match_parent"
android:orientation="vertical"
android:paddingTop="16dp"
android:paddingStart="4dp"
<!-- Hardware. -->
<TextView
- android:layout_width="wrap_content"
android:layout_height="wrap_content"
+ android:layout_width="wrap_content"
android:text="@string/hardware"
android:textStyle="bold"
android:textSize="18sp"
<TextView
android:id="@+id/about_version_brand"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content" />
+ android:layout_height="wrap_content"
+ android:layout_width="wrap_content" />
<TextView
android:id="@+id/about_version_manufacturer"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content" />
+ android:layout_height="wrap_content"
+ android:layout_width="wrap_content" />
<TextView
android:id="@+id/about_version_model"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content" />
+ android:layout_height="wrap_content"
+ android:layout_width="wrap_content" />
<TextView
android:id="@+id/about_version_device"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"/>
+ android:layout_height="wrap_content"
+ android:layout_width="wrap_content" />
<TextView
android:id="@+id/about_version_bootloader"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content" />
+ android:layout_height="wrap_content"
+ android:layout_width="wrap_content" />
<TextView
android:id="@+id/about_version_radio"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"/>
+ android:layout_height="wrap_content"
+ android:layout_width="wrap_content" />
<!-- Software. -->
<TextView
- android:layout_width="wrap_content"
android:layout_height="wrap_content"
+ android:layout_width="wrap_content"
android:text="@string/software"
android:textStyle="bold"
android:textSize="18sp"
<TextView
android:id="@+id/about_version_android"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"/>
+ android:layout_height="wrap_content"
+ android:layout_width="wrap_content" />
<TextView
android:id="@+id/about_version_build"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"/>
+ android:layout_height="wrap_content"
+ android:layout_width="wrap_content" />
<TextView
android:id="@+id/about_version_securitypatch"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content" />
+ android:layout_height="wrap_content"
+ android:layout_width="wrap_content" />
<TextView
android:id="@+id/about_version_webkit"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"/>
+ android:layout_height="wrap_content"
+ android:layout_width="wrap_content" />
<TextView
android:id="@+id/about_version_chrome"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content" />
+ android:layout_height="wrap_content"
+ android:layout_width="wrap_content" />
+
+ <TextView
+ android:id="@+id/about_version_orbot"
+ android:layout_height="wrap_content"
+ android:layout_width="wrap_content" />
<!-- Package Signature. -->
<TextView
<TextView
android:id="@+id/about_version_certificate_issuer_dn"
android:layout_height="wrap_content"
- android:layout_width="wrap_content"/>
+ android:layout_width="wrap_content" />
<TextView
android:id="@+id/about_version_certificate_subject_dn"
android:layout_height="wrap_content"
- android:layout_width="wrap_content"/>
+ android:layout_width="wrap_content" />
<TextView
android:id="@+id/about_version_certificate_start_date"
android:layout_height="wrap_content"
- android:layout_width="wrap_content"/>
+ android:layout_width="wrap_content" />
<TextView
android:id="@+id/about_version_certificate_end_date"
android:layout_height="wrap_content"
- android:layout_width="wrap_content"/>
+ android:layout_width="wrap_content" />
<TextView
android:id="@+id/about_version_certificate_version"
android:layout_height="wrap_content"
- android:layout_width="wrap_content"/>
+ android:layout_width="wrap_content" />
<TextView
android:id="@+id/about_version_certificate_serial_number"
android:layout_height="wrap_content"
- android:layout_width="wrap_content"/>
+ android:layout_width="wrap_content" />
<TextView
android:id="@+id/about_version_certificate_signature_algorithm"
android:layout_height="wrap_content"
- android:layout_width="wrap_content"/>
+ android:layout_width="wrap_content" />
</LinearLayout>
</LinearLayout>
</ScrollView>
\ No newline at end of file