2 * Copyright © 2016-2020 Soren Stoutner <soren@stoutner.com>.
4 * This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
6 * Privacy Browser is free software: you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation, either version 3 of the License, or
9 * (at your option) any later version.
11 * Privacy Browser is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with Privacy Browser. If not, see <http://www.gnu.org/licenses/>.
20 package com.stoutner.privacybrowser.fragments;
22 import android.content.res.Configuration;
23 import android.os.Bundle;
24 import android.view.LayoutInflater;
25 import android.view.View;
26 import android.view.ViewGroup;
27 import android.webkit.WebView;
29 import androidx.annotation.NonNull;
30 import androidx.fragment.app.Fragment;
32 import com.stoutner.privacybrowser.R;
34 public class GuideTabFragment extends Fragment {
35 // Define the class variables.
36 private int tabNumber;
37 private View tabLayout;
39 // Store the tab number in the arguments bundle.
40 public static GuideTabFragment createTab (int tabNumber) {
42 Bundle bundle = new Bundle();
44 // Store the tab number in the bundle.
45 bundle.putInt("tab_number", tabNumber);
47 // Create a new guide tab fragment.
48 GuideTabFragment guideTabFragment = new GuideTabFragment();
50 // Add the bundle to the fragment.
51 guideTabFragment.setArguments(bundle);
53 // Return the new fragment.
54 return guideTabFragment;
58 public void onCreate(Bundle savedInstanceState) {
59 // Run the default commands.
60 super.onCreate(savedInstanceState);
62 // Get a handle for the arguments.
63 Bundle arguments = getArguments();
65 // Remove the lint warning below that arguments might be null.
66 assert arguments != null;
68 // Store the tab number in a class variable.
69 tabNumber = arguments.getInt("tab_number");
73 public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
74 // Inflate the layout. The fragment will take care of attaching the root automatically.
75 tabLayout = inflater.inflate(R.layout.bare_webview, container, false);
77 // Get a handle for the tab WebView.
78 WebView tabWebView = (WebView) tabLayout;
80 // Get the current theme status.
81 int currentThemeStatus = getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK;
83 // Load the tabs according to the theme.
84 if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) { // The dark theme is applied.
85 tabWebView.setBackgroundColor(getResources().getColor(R.color.gray_850));
87 // Tab numbers start at 0.
90 tabWebView.loadUrl("file:///android_asset/" + getString(R.string.android_asset_path) + "/guide_overview_dark.html");
94 tabWebView.loadUrl("file:///android_asset/" + getString(R.string.android_asset_path) + "/guide_javascript_dark.html");
98 tabWebView.loadUrl("file:///android_asset/" + getString(R.string.android_asset_path) + "/guide_local_storage_dark.html");
102 tabWebView.loadUrl("file:///android_asset/" + getString(R.string.android_asset_path) + "/guide_user_agent_dark.html");
106 tabWebView.loadUrl("file:///android_asset/" + getString(R.string.android_asset_path) + "/guide_requests_dark.html");
110 tabWebView.loadUrl("file:///android_asset/" + getString(R.string.android_asset_path) + "/guide_domain_settings_dark.html");
114 tabWebView.loadUrl("file:///android_asset/" + getString(R.string.android_asset_path) + "/guide_ssl_certificates_dark.html");
118 tabWebView.loadUrl("file:///android_asset/" + getString(R.string.android_asset_path) + "/guide_proxies_dark.html");
122 tabWebView.loadUrl("file:///android_asset/" + getString(R.string.android_asset_path) + "/guide_tracking_ids_dark.html");
125 } else { // The light theme is applied.
126 // Tab numbers start at 0.
129 tabWebView.loadUrl("file:///android_asset/" + getString(R.string.android_asset_path) + "/guide_overview_light.html");
133 tabWebView.loadUrl("file:///android_asset/" + getString(R.string.android_asset_path) + "/guide_javascript_light.html");
137 tabWebView.loadUrl("file:///android_asset/" + getString(R.string.android_asset_path) + "/guide_local_storage_light.html");
141 tabWebView.loadUrl("file:///android_asset/" + getString(R.string.android_asset_path) + "/guide_user_agent_light.html");
145 tabWebView.loadUrl("file:///android_asset/" + getString(R.string.android_asset_path) + "/guide_requests_light.html");
149 tabWebView.loadUrl("file:///android_asset/" + getString(R.string.android_asset_path) + "/guide_domain_settings_light.html");
153 tabWebView.loadUrl("file:///android_asset/" + getString(R.string.android_asset_path) + "/guide_ssl_certificates_light.html");
157 tabWebView.loadUrl("file:///android_asset/" + getString(R.string.android_asset_path) + "/guide_proxies_light.html");
161 tabWebView.loadUrl("file:///android_asset/" + getString(R.string.android_asset_path) + "/guide_tracking_ids_light.html");
166 // Scroll the WebView if the saved instance state is not null.
167 if (savedInstanceState != null) {
168 tabWebView.post(() -> tabWebView.setScrollY(savedInstanceState.getInt("scroll_y")));
171 // Return the formatted `tabLayout`.
176 public void onSaveInstanceState(@NonNull Bundle savedInstanceState) {
177 // Run the default commands.
178 super.onSaveInstanceState(savedInstanceState);
180 // Get a handle for the tab WebView. A class variable cannot be used because it gets out of sync when restarting.
181 WebView tabWebView = (WebView) tabLayout;
183 // Save the scroll Y position if the tab WebView is not null, which can happen if a tab is not currently selected.
184 if (tabWebView != null) {
185 savedInstanceState.putInt("scroll_y", tabWebView.getScrollY());