/*
- * Copyright © 2016-2019 Soren Stoutner <soren@stoutner.com>.
+ * Copyright © 2016-2020 Soren Stoutner <soren@stoutner.com>.
*
* This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
*
import android.annotation.SuppressLint;
import android.content.Context;
-import android.content.SharedPreferences;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.Signature;
+import android.content.res.Configuration;
import android.os.Build;
import android.os.Bundle;
-import android.preference.PreferenceManager;
import android.text.SpannableStringBuilder;
import android.text.Spanned;
import android.text.style.ForegroundColorSpan;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
+import androidx.webkit.WebViewCompat;
import com.stoutner.privacybrowser.BuildConfig;
import com.stoutner.privacybrowser.R;
import java.util.Date;
public class AboutTabFragment extends Fragment {
- // Declare the class variables.
+ // Define the class variables.
private int tabNumber;
private String[] blocklistVersions;
+ private View tabLayout;
public static AboutTabFragment createTab(int tabNumber, String[] blocklistVersions) {
// Create a bundle.
@Override
public View onCreateView(@NonNull LayoutInflater layoutInflater, ViewGroup container, Bundle savedInstanceState) {
- // Create a tab layout view.
- View tabLayout;
-
// Get a handle for the context and assert that it isn't null.
Context context = getContext();
assert context != null;
- // Get a handle for the shared preferences.
- SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
-
- // Get the theme preference.
- boolean darkTheme = sharedPreferences.getBoolean("dark_theme", false);
+ // Get the current theme status.
+ int currentThemeStatus = getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK;
// Load the tabs. Tab numbers start at 0.
if (tabNumber == 0) { // Load the about tab.
SpannableStringBuilder ultraListStringBuilder = new SpannableStringBuilder(ultraListLabel + blocklistVersions[4]);
SpannableStringBuilder ultraPrivacyStringBuilder = new SpannableStringBuilder(ultraPrivacyLabel + blocklistVersions[5]);
- // Create the `blueColorSpan` variable.
+ // Define the blue color span variable.
ForegroundColorSpan blueColorSpan;
- // Set `blueColorSpan` according to the theme. We have to use the deprecated `getColor()` until API >= 23.
- if (darkTheme) {
- blueColorSpan = new ForegroundColorSpan(getResources().getColor(R.color.blue_400));
+ // Set the blue color span according to the theme. The deprecated `getResources()` must be used until the minimum API >= 23.
+ if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
+ blueColorSpan = new ForegroundColorSpan(getResources().getColor(R.color.violet_500));
} else {
blueColorSpan = new ForegroundColorSpan(getResources().getColor(R.color.blue_700));
}
securityPatchTextView.setVisibility(View.GONE);
}
- // Only populate the WebView provider if the SDK >= 26.
- if (Build.VERSION.SDK_INT >= 26) {
+ // Only populate the WebView provider if the SDK >= 21.
+ if (Build.VERSION.SDK_INT >= 21) {
// Create the WebView provider label.
String webViewProviderLabel = getString(R.string.webview_provider) + " ";
// Get the current WebView package info.
- PackageInfo webViewPackageInfo = WebView.getCurrentWebViewPackage();
+ PackageInfo webViewPackageInfo = WebViewCompat.getCurrentWebViewPackage(context);
// Remove the warning below that the package info might be null.
assert webViewPackageInfo != null;
// Display the WebView provider.
webViewProviderTextView.setText(webViewProviderStringBuilder);
- } else { // The API < 26.
+ } else { // The API < 21.
// Hide the WebView provider text view.
webViewProviderTextView.setVisibility(View.GONE);
}
WebView tabWebView = (WebView) tabLayout;
// Load the tabs according to the theme.
- if (darkTheme) { // The dark theme is applied.
+ if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) { // The dark theme is applied.
// Set the background color. The deprecated `.getColor()` must be used until the minimum API >= 23.
tabWebView.setBackgroundColor(getResources().getColor(R.color.gray_850));
}
}
+ // Scroll the tab if the saved instance state is not null.
+ if (savedInstanceState != null) {
+ tabLayout.post(() -> {
+ tabLayout.setScrollX(savedInstanceState.getInt("scroll_x"));
+ tabLayout.setScrollY(savedInstanceState.getInt("scroll_y"));
+ });
+ }
+
// Return the formatted `tabLayout`.
return tabLayout;
}
+
+ @Override
+ public void onSaveInstanceState(@NonNull Bundle savedInstanceState) {
+ // Run the default commands.
+ super.onSaveInstanceState(savedInstanceState);
+
+ // Save the scroll positions if the tab layout is not null, which can happen if a tab is not currently selected.
+ if (tabLayout != null) {
+ savedInstanceState.putInt("scroll_x", tabLayout.getScrollX());
+ savedInstanceState.putInt("scroll_y", tabLayout.getScrollY());
+ }
+ }
}
\ No newline at end of file