diff --git a/app/build.gradle b/app/build.gradle index 296da4c3b..bf1d4b109 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -118,6 +118,10 @@ android { // Disables dependency metadata when building Android App Bundles. includeInBundle = false } + + buildFeatures { + aidl true // REVIEW up-10 + } } ext { @@ -255,6 +259,10 @@ dependencies { implementation "com.evernote:android-state:$stateSaverVersion" kapt "com.evernote:android-state-processor:$stateSaverVersion" + // changing fonts + implementation 'com.github.MarcinOrlowski:fonty:3.1.5' + + // HTML parser implementation "org.jsoup:jsoup:1.17.2" diff --git a/app/src/main/assets/fonts/Algerian.TTF b/app/src/main/assets/fonts/Algerian.TTF new file mode 100644 index 000000000..dcc72ae9d Binary files /dev/null and b/app/src/main/assets/fonts/Algerian.TTF differ diff --git a/app/src/main/assets/fonts/BELL.TTF b/app/src/main/assets/fonts/BELL.TTF new file mode 100644 index 000000000..3f426758c Binary files /dev/null and b/app/src/main/assets/fonts/BELL.TTF differ diff --git a/app/src/main/assets/fonts/BROADW.TTF b/app/src/main/assets/fonts/BROADW.TTF new file mode 100644 index 000000000..62aeb1e75 Binary files /dev/null and b/app/src/main/assets/fonts/BROADW.TTF differ diff --git a/app/src/main/assets/fonts/arial.ttf b/app/src/main/assets/fonts/arial.ttf new file mode 100644 index 000000000..27372d9db Binary files /dev/null and b/app/src/main/assets/fonts/arial.ttf differ diff --git a/app/src/main/assets/fonts/calibrii.ttf b/app/src/main/assets/fonts/calibrii.ttf new file mode 100644 index 000000000..f35fd1a81 Binary files /dev/null and b/app/src/main/assets/fonts/calibrii.ttf differ diff --git a/app/src/main/assets/fonts/times.ttf b/app/src/main/assets/fonts/times.ttf new file mode 100644 index 000000000..3ea695f2e Binary files /dev/null and b/app/src/main/assets/fonts/times.ttf differ diff --git a/app/src/main/java/org/schabi/newpipe/App.java b/app/src/main/java/org/schabi/newpipe/App.java index 9bc25d55d..80dc68b3c 100644 --- a/app/src/main/java/org/schabi/newpipe/App.java +++ b/app/src/main/java/org/schabi/newpipe/App.java @@ -120,6 +120,7 @@ public class App extends Application { configureRxJavaErrorHandler(); } + @Override public void onTerminate() { super.onTerminate(); diff --git a/app/src/main/java/org/schabi/newpipe/MainActivity.java b/app/src/main/java/org/schabi/newpipe/MainActivity.java index 3e1ade7b2..b8fbdeda2 100644 --- a/app/src/main/java/org/schabi/newpipe/MainActivity.java +++ b/app/src/main/java/org/schabi/newpipe/MainActivity.java @@ -57,6 +57,7 @@ import androidx.fragment.app.FragmentManager; import androidx.preference.PreferenceManager; import com.google.android.material.bottomsheet.BottomSheetBehavior; +import com.marcinorlowski.fonty.Fonty; import org.schabi.newpipe.databinding.ActivityMainBinding; import org.schabi.newpipe.databinding.DrawerHeaderBinding; @@ -130,6 +131,9 @@ public class MainActivity extends AppCompatActivity { @Override protected void onCreate(final Bundle savedInstanceState) { + // Apply the preferred font globally + final String preferredFont = getPreferredFont(this); + setUpFont(preferredFont); if (DEBUG) { Log.d(TAG, "onCreate() called with: " + "savedInstanceState = [" + savedInstanceState + "]"); @@ -174,9 +178,13 @@ public class MainActivity extends AppCompatActivity { && ReleaseVersionUtil.INSTANCE.isReleaseApk()) { UpdateSettingsFragment.askForConsentToUpdateChecks(this); } + if (!preferredFont.equals(getString(R.string.default_font_key))) { + Fonty.setFonts(this); + } + } - @Override +@Override protected void onPostCreate(final Bundle savedInstanceState) { super.onPostCreate(savedInstanceState); @@ -190,6 +198,50 @@ public class MainActivity extends AppCompatActivity { NewVersionWorker.enqueueNewVersionCheckingWork(app, false); } } + public String getPreferredFont(final Context context) { + final SharedPreferences preferences = PreferenceManager + .getDefaultSharedPreferences(context); + return preferences.getString("preferred_font", getString(R.string.default_font_key)); + } + + public void setUpFont(final String preferredFont) { + switch (preferredFont) { + case "Arial": + Fonty.context(this) + .normalTypeface("arial.ttf") + .build(); + break; + case "Broadway": + Fonty.context(this) + .normalTypeface("BROADW.TTF") + .build(); + break; + case "Algerian": + Fonty.context(this) + .normalTypeface("Algerian.TTF") + .build(); + break; + case "Bell MT": + Fonty.context(this) + .normalTypeface("BELL.TTF") + .build(); + break; + case "Calibri": + Fonty.context(this) + .normalTypeface("calibrii.ttf") + .build(); + break; + case "Time New Roman": + Fonty.context(this) + .normalTypeface("times.ttf") + .build(); + break; + default: + // do nothing + break; + } + + } private void setupDrawer() throws ExtractionException { addDrawerMenuForCurrentService(); diff --git a/app/src/main/java/org/schabi/newpipe/RouterActivity.java b/app/src/main/java/org/schabi/newpipe/RouterActivity.java index b1eb581bc..86b668cad 100644 --- a/app/src/main/java/org/schabi/newpipe/RouterActivity.java +++ b/app/src/main/java/org/schabi/newpipe/RouterActivity.java @@ -43,6 +43,7 @@ import androidx.preference.PreferenceManager; import com.evernote.android.state.State; import com.livefront.bridge.Bridge; +import com.marcinorlowski.fonty.Fonty; // REVIEW up-10 import org.schabi.newpipe.database.stream.model.StreamEntity; import org.schabi.newpipe.databinding.ListRadioIconItemBinding; @@ -129,6 +130,7 @@ public class RouterActivity extends AppCompatActivity { @Override protected void onCreate(final Bundle savedInstanceState) { + final String preferredFont = getPreferredFont(this); ThemeHelper.setDayNightMode(this); setTheme(ThemeHelper.isLightThemeSelected(this) ? R.style.RouterActivityThemeLight : R.style.RouterActivityThemeDark); @@ -184,7 +186,17 @@ public class RouterActivity extends AppCompatActivity { finish(); } } + + if (!preferredFont.equals(getString(R.string.default_font_key))) { + Fonty.setFonts(this); + } } + public String getPreferredFont(final Context context) { + final SharedPreferences preferences = PreferenceManager + .getDefaultSharedPreferences(context); + return preferences.getString("preferred_font", getString(R.string.default_font_key)); + } + @Override protected void onStop() { diff --git a/app/src/main/java/org/schabi/newpipe/about/AboutActivity.kt b/app/src/main/java/org/schabi/newpipe/about/AboutActivity.kt index 045278da7..626f0e871 100644 --- a/app/src/main/java/org/schabi/newpipe/about/AboutActivity.kt +++ b/app/src/main/java/org/schabi/newpipe/about/AboutActivity.kt @@ -1,5 +1,6 @@ package org.schabi.newpipe.about +import android.content.Context import android.os.Bundle import android.view.LayoutInflater import android.view.MenuItem @@ -10,8 +11,10 @@ import androidx.annotation.StringRes import androidx.appcompat.app.AppCompatActivity import androidx.fragment.app.Fragment import androidx.fragment.app.FragmentActivity +import androidx.preference.PreferenceManager import androidx.viewpager2.adapter.FragmentStateAdapter import com.google.android.material.tabs.TabLayoutMediator +import com.marcinorlowski.fonty.Fonty import org.schabi.newpipe.BuildConfig import org.schabi.newpipe.R import org.schabi.newpipe.databinding.ActivityAboutBinding @@ -44,6 +47,15 @@ class AboutActivity : AppCompatActivity() { ) { tab, position -> tab.setText(mAboutStateAdapter.getPageTitle(position)) }.attach() + val preferredFont = getPreferredFont(this) + if (!preferredFont.equals(getString(R.string.default_font_key))) { + Fonty.setFonts(this) + } + } + fun getPreferredFont(context: Context?): String? { + val preferences = PreferenceManager + .getDefaultSharedPreferences(context!!) + return preferences.getString("preferred_font", getString(R.string.default_font_key)) } override fun onOptionsItemSelected(item: MenuItem): Boolean { diff --git a/app/src/main/java/org/schabi/newpipe/download/DownloadActivity.java b/app/src/main/java/org/schabi/newpipe/download/DownloadActivity.java index 37eefed96..8d73bdb23 100644 --- a/app/src/main/java/org/schabi/newpipe/download/DownloadActivity.java +++ b/app/src/main/java/org/schabi/newpipe/download/DownloadActivity.java @@ -1,6 +1,8 @@ package org.schabi.newpipe.download; +import android.content.Context; import android.content.Intent; +import android.content.SharedPreferences; import android.os.Bundle; import android.view.Menu; import android.view.MenuInflater; @@ -10,6 +12,7 @@ import android.view.ViewTreeObserver; import androidx.appcompat.app.ActionBar; import androidx.appcompat.app.AppCompatActivity; import androidx.fragment.app.FragmentTransaction; +import androidx.preference.PreferenceManager; import org.schabi.newpipe.R; import org.schabi.newpipe.databinding.ActivityDownloaderBinding; @@ -22,6 +25,8 @@ import us.shandian.giga.ui.fragment.MissionsFragment; import static org.schabi.newpipe.util.Localization.assureCorrectAppLanguage; +import com.marcinorlowski.fonty.Fonty; + public class DownloadActivity extends AppCompatActivity { private static final String MISSIONS_FRAGMENT_TAG = "fragment_tag"; @@ -63,6 +68,10 @@ public class DownloadActivity extends AppCompatActivity { if (DeviceUtils.isTv(this)) { FocusOverlayView.setupFocusObserver(this); } + final String preferredFont = getPreferredFont(this); + if (!preferredFont.equals(getString(R.string.default_font_key))) { + Fonty.setFonts(this); + } } private void updateFragments() { @@ -73,6 +82,12 @@ public class DownloadActivity extends AppCompatActivity { .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE) .commit(); } + public String getPreferredFont(final Context context) { + final SharedPreferences preferences = PreferenceManager + .getDefaultSharedPreferences(context); + return preferences.getString("preferred_font", getString(R.string.default_font_key)); + } + @Override public boolean onCreateOptionsMenu(final Menu menu) { diff --git a/app/src/main/java/org/schabi/newpipe/download/DownloadDialog.java b/app/src/main/java/org/schabi/newpipe/download/DownloadDialog.java index 34a4ba022..d0ac1e4df 100644 --- a/app/src/main/java/org/schabi/newpipe/download/DownloadDialog.java +++ b/app/src/main/java/org/schabi/newpipe/download/DownloadDialog.java @@ -41,6 +41,7 @@ import androidx.preference.PreferenceManager; import com.evernote.android.state.State; import com.livefront.bridge.Bridge; +import com.marcinorlowski.fonty.Fonty; // REVIEW up-10 import com.nononsenseapps.filepicker.Utils; import org.schabi.newpipe.MainActivity; @@ -117,7 +118,6 @@ public class DownloadDialog extends DialogFragment private ActionMenuItemView okButton = null; private Context context = null; private boolean askForSavePath; - private AudioTrackAdapter audioTrackAdapter; private StreamItemAdapter audioStreamsAdapter; private StreamItemAdapter videoStreamsAdapter; @@ -152,7 +152,6 @@ public class DownloadDialog extends DialogFragment // otherwise InstantiationException will be thrown when fragment is recreated // TODO: Maybe use a custom FragmentFactory instead? } - /** * Create a new download dialog with the video, audio and subtitle streams from the provided * stream info. Video streams and video-only streams will be put into a single list menu, @@ -245,6 +244,7 @@ public class DownloadDialog extends DialogFragment }, Context.BIND_AUTO_CREATE); } + /** * Update the displayed video streams based on the selected audio track. */ @@ -287,10 +287,22 @@ public class DownloadDialog extends DialogFragment + "inflater = [" + inflater + "], container = [" + container + "], " + "savedInstanceState = [" + savedInstanceState + "]"); } - return inflater.inflate(R.layout.download_dialog, container); + final View view = inflater.inflate(R.layout.download_dialog, container); + final String preferredFont = getPreferredFont(view.getContext()); + if (!preferredFont.equals(getString(R.string.default_font_key))) { + Fonty.setFonts((ViewGroup) view); + } + return view; } - @Override + public String getPreferredFont(final Context cont) { + final SharedPreferences preferences = PreferenceManager + .getDefaultSharedPreferences(cont); + return preferences.getString("preferred_font", getString(R.string.default_font_key)); + } + + +@Override public void onViewCreated(@NonNull final View view, @Nullable final Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); diff --git a/app/src/main/java/org/schabi/newpipe/error/ErrorActivity.java b/app/src/main/java/org/schabi/newpipe/error/ErrorActivity.java index 2cf62db2b..83d7cc257 100644 --- a/app/src/main/java/org/schabi/newpipe/error/ErrorActivity.java +++ b/app/src/main/java/org/schabi/newpipe/error/ErrorActivity.java @@ -4,6 +4,7 @@ import static org.schabi.newpipe.util.Localization.assureCorrectAppLanguage; import android.content.Context; import android.content.Intent; +import android.content.SharedPreferences; import android.net.Uri; import android.os.Build; import android.os.Bundle; @@ -16,8 +17,10 @@ import androidx.appcompat.app.ActionBar; import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AppCompatActivity; import androidx.core.content.IntentCompat; +import androidx.preference.PreferenceManager; import com.grack.nanojson.JsonWriter; +import com.marcinorlowski.fonty.Fonty; import org.schabi.newpipe.BuildConfig; import org.schabi.newpipe.R; @@ -83,6 +86,8 @@ public class ErrorActivity extends AppCompatActivity { @Override protected void onCreate(final Bundle savedInstanceState) { + final String preferredFont = getPreferredFont(this); + assureCorrectAppLanguage(this); super.onCreate(savedInstanceState); @@ -127,6 +132,9 @@ public class ErrorActivity extends AppCompatActivity { for (final String e : errorInfo.getStackTraces()) { Log.e(TAG, e); } + if (!preferredFont.equals(getString(R.string.default_font_key))) { + Fonty.setFonts(this); + } } @Override @@ -150,6 +158,13 @@ public class ErrorActivity extends AppCompatActivity { return false; } } + public String getPreferredFont(final Context context) { + final SharedPreferences preferences = PreferenceManager + .getDefaultSharedPreferences(context); + return preferences.getString("preferred_font", getString(R.string.default_font_key)); + } + + private void openPrivacyPolicyDialog(final Context context, final String action) { new AlertDialog.Builder(context) diff --git a/app/src/main/java/org/schabi/newpipe/error/ReCaptchaActivity.java b/app/src/main/java/org/schabi/newpipe/error/ReCaptchaActivity.java index 51a0ff1e6..26c30d8e6 100644 --- a/app/src/main/java/org/schabi/newpipe/error/ReCaptchaActivity.java +++ b/app/src/main/java/org/schabi/newpipe/error/ReCaptchaActivity.java @@ -1,6 +1,7 @@ package org.schabi.newpipe.error; import android.annotation.SuppressLint; +import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.os.Bundle; @@ -20,6 +21,8 @@ import androidx.appcompat.app.AppCompatActivity; import androidx.core.app.NavUtils; import androidx.preference.PreferenceManager; +import com.marcinorlowski.fonty.Fonty; + import org.schabi.newpipe.DownloaderImpl; import org.schabi.newpipe.MainActivity; import org.schabi.newpipe.R; @@ -68,6 +71,7 @@ public class ReCaptchaActivity extends AppCompatActivity { @SuppressLint("SetJavaScriptEnabled") @Override protected void onCreate(final Bundle savedInstanceState) { + final String preferredFont = getPreferredFont(this); ThemeHelper.setTheme(this); super.onCreate(savedInstanceState); @@ -109,6 +113,10 @@ public class ReCaptchaActivity extends AppCompatActivity { CookieManager.getInstance().removeAllCookies(null); recaptchaBinding.reCaptchaWebView.loadUrl(url); + + if (!preferredFont.equals(getString(R.string.default_font_key))) { + Fonty.setFonts(this); + } } @Override @@ -129,6 +137,12 @@ public class ReCaptchaActivity extends AppCompatActivity { public void onBackPressed() { saveCookiesAndFinish(); } + public String getPreferredFont(final Context context) { + final SharedPreferences preferences = PreferenceManager + .getDefaultSharedPreferences(context); + return preferences.getString("preferred_font", getString(R.string.default_font_key)); + } + @Override public boolean onOptionsItemSelected(final MenuItem item) { diff --git a/app/src/main/java/org/schabi/newpipe/fragments/BlankFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/BlankFragment.java index cd3019888..0bae4fde4 100644 --- a/app/src/main/java/org/schabi/newpipe/fragments/BlankFragment.java +++ b/app/src/main/java/org/schabi/newpipe/fragments/BlankFragment.java @@ -1,11 +1,16 @@ package org.schabi.newpipe.fragments; +import android.content.Context; +import android.content.SharedPreferences; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import androidx.annotation.Nullable; +import androidx.preference.PreferenceManager; + +import com.marcinorlowski.fonty.Fonty; import org.schabi.newpipe.BaseFragment; import org.schabi.newpipe.R; @@ -16,8 +21,19 @@ public class BlankFragment extends BaseFragment { public View onCreateView(final LayoutInflater inflater, @Nullable final ViewGroup container, final Bundle savedInstanceState) { setTitle("Tubular"); - return inflater.inflate(R.layout.fragment_blank, container, false); + final View view = inflater.inflate(R.layout.fragment_blank, container, false); // REVIEW + final String preferredFont = getPreferredFont(view.getContext()); // up-10 + if (!preferredFont.equals(getString(R.string.default_font_key))) { // + Fonty.setFonts((ViewGroup) view); // + } // + return view; // } + public String getPreferredFont(final Context context) { + final SharedPreferences preferences = PreferenceManager + .getDefaultSharedPreferences(context); + return preferences.getString("preferred_font", getString(R.string.default_font_key)); + } + @Override public void onResume() { diff --git a/app/src/main/java/org/schabi/newpipe/fragments/EmptyFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/EmptyFragment.java index d4e73bcac..725961145 100644 --- a/app/src/main/java/org/schabi/newpipe/fragments/EmptyFragment.java +++ b/app/src/main/java/org/schabi/newpipe/fragments/EmptyFragment.java @@ -1,11 +1,16 @@ package org.schabi.newpipe.fragments; +import android.content.Context; +import android.content.SharedPreferences; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import androidx.annotation.Nullable; +import androidx.preference.PreferenceManager; + +import com.marcinorlowski.fonty.Fonty; import org.schabi.newpipe.BaseFragment; import org.schabi.newpipe.R; @@ -20,7 +25,11 @@ public class EmptyFragment extends BaseFragment { emptyFragment.setArguments(bundle); return emptyFragment; } - + public String getPreferredFont(final Context context) { + final SharedPreferences preferences = PreferenceManager + .getDefaultSharedPreferences(context); + return preferences.getString("preferred_font", getString(R.string.default_font_key)); + } @Override public View onCreateView(final LayoutInflater inflater, @Nullable final ViewGroup container, final Bundle savedInstanceState) { @@ -28,6 +37,11 @@ public class EmptyFragment extends BaseFragment { final View view = inflater.inflate(R.layout.fragment_empty, container, false); view.findViewById(R.id.empty_state_view).setVisibility( showMessage ? View.VISIBLE : View.GONE); + final String preferredFont = getPreferredFont(view.getContext()); + if (!preferredFont.equals(getString(R.string.default_font_key))) { + Fonty.setFonts((ViewGroup) view); + } + return view; } } diff --git a/app/src/main/java/org/schabi/newpipe/fragments/MainFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/MainFragment.java index 381de5003..587b97186 100644 --- a/app/src/main/java/org/schabi/newpipe/fragments/MainFragment.java +++ b/app/src/main/java/org/schabi/newpipe/fragments/MainFragment.java @@ -32,6 +32,7 @@ import androidx.preference.PreferenceManager; import androidx.viewpager.widget.ViewPager; import com.google.android.material.tabs.TabLayout; +import com.marcinorlowski.fonty.Fonty; import org.schabi.newpipe.BaseFragment; import org.schabi.newpipe.R; @@ -91,14 +92,26 @@ public class MainFragment extends BaseFragment implements TabLayout.OnTabSelecte mainTabsPositionKey = getString(R.string.main_tabs_position_key); mainTabsPositionBottom = prefs.getBoolean(mainTabsPositionKey, false); } - + public String getPreferredFont(final Context context) { + final SharedPreferences preferences = PreferenceManager + .getDefaultSharedPreferences(context); + return preferences.getString("preferred_font", getString(R.string.default_font_key)); + } @Override + public View onCreateView(@NonNull final LayoutInflater inflater, @Nullable final ViewGroup container, @Nullable final Bundle savedInstanceState) { - return inflater.inflate(R.layout.fragment_main, container, false); + final View view = inflater.inflate(R.layout.fragment_main, container, false); + final String preferredFont = getPreferredFont(view.getContext()); + if (!preferredFont.equals(getString(R.string.default_font_key))) { + Fonty.setFonts((ViewGroup) view); + } + return view; } + + @Override protected void initViews(final View rootView, final Bundle savedInstanceState) { super.initViews(rootView, savedInstanceState); diff --git a/app/src/main/java/org/schabi/newpipe/fragments/detail/BaseDescriptionFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/detail/BaseDescriptionFragment.java index 4789b02e6..a36f7021a 100644 --- a/app/src/main/java/org/schabi/newpipe/fragments/detail/BaseDescriptionFragment.java +++ b/app/src/main/java/org/schabi/newpipe/fragments/detail/BaseDescriptionFragment.java @@ -4,6 +4,8 @@ import static android.text.TextUtils.isEmpty; import static org.schabi.newpipe.extractor.utils.Utils.isBlank; import static org.schabi.newpipe.util.text.TextLinkifier.SET_LINK_MOVEMENT_METHOD; +import android.content.Context; +import android.content.SharedPreferences; import android.graphics.Typeface; import android.os.Bundle; import android.text.SpannableStringBuilder; @@ -21,8 +23,10 @@ import androidx.annotation.Nullable; import androidx.annotation.StringRes; import androidx.appcompat.widget.TooltipCompat; import androidx.core.text.HtmlCompat; +import androidx.preference.PreferenceManager; import com.google.android.material.chip.Chip; +import com.marcinorlowski.fonty.Fonty; import org.schabi.newpipe.BaseFragment; import org.schabi.newpipe.R; @@ -53,8 +57,17 @@ public abstract class BaseDescriptionFragment extends BaseFragment { setupDescription(); setupMetadata(inflater, binding.detailMetadataLayout); addTagsMetadataItem(inflater, binding.detailMetadataLayout); + final String preferredFont = getPreferredFont(binding.getRoot().getContext()); + if (!preferredFont.equals(getString(R.string.default_font_key))) { + Fonty.setFonts((ViewGroup) binding.getRoot()); + } return binding.getRoot(); } + public String getPreferredFont(final Context context) { + final SharedPreferences preferences = PreferenceManager + .getDefaultSharedPreferences(context); + return preferences.getString("preferred_font", getString(R.string.default_font_key)); + } @Override public void onDestroy() { diff --git a/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java index c9e6452c9..5179af3fd 100644 --- a/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java +++ b/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java @@ -62,6 +62,7 @@ import com.google.android.exoplayer2.PlaybackParameters; import com.google.android.material.appbar.AppBarLayout; import com.google.android.material.bottomsheet.BottomSheetBehavior; import com.google.android.material.tabs.TabLayout; +import com.marcinorlowski.fonty.Fonty; import org.schabi.newpipe.App; import org.schabi.newpipe.R; @@ -361,8 +362,18 @@ public final class VideoDetailFragment public View onCreateView(@NonNull final LayoutInflater inflater, final ViewGroup container, final Bundle savedInstanceState) { binding = FragmentVideoDetailBinding.inflate(inflater, container, false); + final String preferredFont = getPreferredFont(binding.getRoot().getContext()); + if (preferredFont.equals(getString(R.string.default_font_key))) { + Fonty.setFonts((ViewGroup) binding.getRoot()); + } return binding.getRoot(); } + public String getPreferredFont(final Context context) { + final SharedPreferences preferences = PreferenceManager + .getDefaultSharedPreferences(context); + return preferences.getString("preferred_font", getString(R.string.default_font_key)); + } + @Override public void onPause() { diff --git a/app/src/main/java/org/schabi/newpipe/fragments/list/channel/ChannelFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/list/channel/ChannelFragment.java index d67cd11f1..067321bdf 100644 --- a/app/src/main/java/org/schabi/newpipe/fragments/list/channel/ChannelFragment.java +++ b/app/src/main/java/org/schabi/newpipe/fragments/list/channel/ChannelFragment.java @@ -29,6 +29,7 @@ import com.evernote.android.state.State; import com.google.android.material.snackbar.Snackbar; import com.google.android.material.tabs.TabLayout; import com.jakewharton.rxbinding4.view.RxView; +import com.marcinorlowski.fonty.Fonty; import org.schabi.newpipe.R; import org.schabi.newpipe.database.subscription.NotificationMode; @@ -192,8 +193,18 @@ public class ChannelFragment extends BaseStateFragment @Nullable final ViewGroup container, @Nullable final Bundle savedInstanceState) { binding = FragmentChannelBinding.inflate(inflater, container, false); + final String preferredFont = getPreferredFont(binding.getRoot().getContext()); + if (!preferredFont.equals(getString(R.string.default_font_key))) { + Fonty.setFonts((ViewGroup) binding.getRoot()); + } return binding.getRoot(); } + public String getPreferredFont(final Context context) { + final SharedPreferences preferences = PreferenceManager + .getDefaultSharedPreferences(context); + return preferences.getString("preferred_font", getString(R.string.default_font_key)); + } + @Override // called from onViewCreated in BaseFragment.onViewCreated protected void initViews(final View rootView, final Bundle savedInstanceState) { diff --git a/app/src/main/java/org/schabi/newpipe/fragments/list/channel/ChannelTabFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/list/channel/ChannelTabFragment.java index c18b0a36f..31996698f 100644 --- a/app/src/main/java/org/schabi/newpipe/fragments/list/channel/ChannelTabFragment.java +++ b/app/src/main/java/org/schabi/newpipe/fragments/list/channel/ChannelTabFragment.java @@ -1,5 +1,7 @@ package org.schabi.newpipe.fragments.list.channel; +import android.content.Context; +import android.content.SharedPreferences; import android.os.Bundle; import android.util.Log; import android.view.LayoutInflater; @@ -8,6 +10,9 @@ import android.view.ViewGroup; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.preference.PreferenceManager; + +import com.marcinorlowski.fonty.Fonty; import com.evernote.android.state.State; @@ -77,8 +82,19 @@ public class ChannelTabFragment extends BaseListInfoFragment() { } override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { - return inflater.inflate(R.layout.fragment_feed, container, false) + val curView = inflater.inflate(R.layout.fragment_feed, container, false) as ViewGroup + + // Apply the preferred font globally + val preferredFont = getPreferredFont(curView.context) + if (!preferredFont.equals(getString(R.string.default_font_key))) { + Fonty.setFonts(curView) + } + return curView } override fun onViewCreated(rootView: View, savedInstanceState: Bundle?) { @@ -179,6 +187,11 @@ class FeedFragment : BaseStateFragment() { } } } + fun getPreferredFont(context: Context?): String? { + val preferences = PreferenceManager + .getDefaultSharedPreferences(context!!) + return preferences.getString("preferred_font", (getString(R.string.default_font_key))) + } private fun setupListViewMode() { // does everything needed to setup the layouts for grid or list modes diff --git a/app/src/main/java/org/schabi/newpipe/local/history/StatisticsPlaylistFragment.java b/app/src/main/java/org/schabi/newpipe/local/history/StatisticsPlaylistFragment.java index 0a35541ad..baf191d9c 100644 --- a/app/src/main/java/org/schabi/newpipe/local/history/StatisticsPlaylistFragment.java +++ b/app/src/main/java/org/schabi/newpipe/local/history/StatisticsPlaylistFragment.java @@ -1,6 +1,7 @@ package org.schabi.newpipe.local.history; import android.content.Context; +import android.content.SharedPreferences; import android.os.Bundle; import android.os.Parcelable; import android.view.LayoutInflater; @@ -13,10 +14,12 @@ import android.widget.Toast; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.preference.PreferenceManager; import androidx.viewbinding.ViewBinding; import com.evernote.android.state.State; import com.google.android.material.snackbar.Snackbar; +import com.marcinorlowski.fonty.Fonty; import org.reactivestreams.Subscriber; import org.reactivestreams.Subscription; @@ -95,8 +98,19 @@ public class StatisticsPlaylistFragment public View onCreateView(@NonNull final LayoutInflater inflater, @Nullable final ViewGroup container, @Nullable final Bundle savedInstanceState) { - return inflater.inflate(R.layout.fragment_playlist, container, false); + final View view = inflater.inflate(R.layout.fragment_playlist, container, false); + final String preferredFont = getPreferredFont(view.getContext()); + if (!preferredFont.equals(getString(R.string.default_font_key))) { + Fonty.setFonts((ViewGroup) view); + } + return view; } + public String getPreferredFont(final Context context) { + final SharedPreferences preferences = PreferenceManager + .getDefaultSharedPreferences(context); + return preferences.getString("preferred_font", (getString(R.string.default_font_key))); + } + @Override public void onResume() { diff --git a/app/src/main/java/org/schabi/newpipe/local/holder/LocalBookmarkPlaylistItemHolder.java b/app/src/main/java/org/schabi/newpipe/local/holder/LocalBookmarkPlaylistItemHolder.java index 16130009b..6498dd987 100644 --- a/app/src/main/java/org/schabi/newpipe/local/holder/LocalBookmarkPlaylistItemHolder.java +++ b/app/src/main/java/org/schabi/newpipe/local/holder/LocalBookmarkPlaylistItemHolder.java @@ -1,9 +1,15 @@ package org.schabi.newpipe.local.holder; +import android.content.Context; +import android.content.SharedPreferences; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; +import androidx.preference.PreferenceManager; + +import com.marcinorlowski.fonty.Fonty; + import org.schabi.newpipe.R; import org.schabi.newpipe.database.LocalItem; import org.schabi.newpipe.database.playlist.PlaylistMetadataEntry; @@ -24,7 +30,18 @@ public class LocalBookmarkPlaylistItemHolder extends LocalPlaylistItemHolder { final ViewGroup parent) { super(infoItemBuilder, layoutId, parent); itemHandleView = itemView.findViewById(R.id.itemHandle); + + final String preferredFont = getPreferredFont(itemHandleView.getContext()); + if (!preferredFont.equals("system")) { + Fonty.setFonts((ViewGroup) itemHandleView); + } } + public String getPreferredFont(final Context context) { + final SharedPreferences preferences = PreferenceManager + .getDefaultSharedPreferences(context); + return preferences.getString("preferred_font", "system"); + } + @Override public void updateFromItem(final LocalItem localItem, diff --git a/app/src/main/java/org/schabi/newpipe/local/playlist/LocalPlaylistFragment.java b/app/src/main/java/org/schabi/newpipe/local/playlist/LocalPlaylistFragment.java index 20aa441d0..390421420 100644 --- a/app/src/main/java/org/schabi/newpipe/local/playlist/LocalPlaylistFragment.java +++ b/app/src/main/java/org/schabi/newpipe/local/playlist/LocalPlaylistFragment.java @@ -5,6 +5,7 @@ import static org.schabi.newpipe.ktx.ViewUtils.animate; import static org.schabi.newpipe.util.ThemeHelper.shouldUseGridLayout; import android.content.Context; +import android.content.SharedPreferences; import android.os.Bundle; import android.os.Parcelable; import android.text.InputType; @@ -22,11 +23,13 @@ import android.widget.Toast; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.app.AlertDialog; +import androidx.preference.PreferenceManager; import androidx.recyclerview.widget.ItemTouchHelper; import androidx.recyclerview.widget.RecyclerView; import androidx.viewbinding.ViewBinding; import com.evernote.android.state.State; +import com.marcinorlowski.fonty.Fonty; //REVIEW up-10 import org.reactivestreams.Subscriber; import org.reactivestreams.Subscription; @@ -126,12 +129,21 @@ public class LocalPlaylistFragment extends BaseLocalListFragment() { } override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { - return inflater.inflate(R.layout.fragment_subscription, container, false) + val curView = inflater.inflate(R.layout.fragment_subscription, container, false) as ViewGroup + val preferredFont = getPreferredFont(curView.context) + if (!preferredFont.equals(getString(R.string.default_font_key))) { + Fonty.setFonts(curView) + } + + return curView + } + fun getPreferredFont(context: Context?): String? { + val preferences = PreferenceManager + .getDefaultSharedPreferences(context!!) + return preferences.getString("preferred_font", (getString(R.string.default_font_key))) } override fun onPause() { diff --git a/app/src/main/java/org/schabi/newpipe/local/subscription/SubscriptionsImportFragment.java b/app/src/main/java/org/schabi/newpipe/local/subscription/SubscriptionsImportFragment.java index 77a70afa9..ba8c9c3fc 100644 --- a/app/src/main/java/org/schabi/newpipe/local/subscription/SubscriptionsImportFragment.java +++ b/app/src/main/java/org/schabi/newpipe/local/subscription/SubscriptionsImportFragment.java @@ -7,7 +7,9 @@ import static org.schabi.newpipe.local.subscription.services.SubscriptionsImport import static org.schabi.newpipe.local.subscription.services.SubscriptionsImportService.KEY_VALUE; import android.app.Activity; +import android.content.Context; import android.content.Intent; +import android.content.SharedPreferences; import android.os.Bundle; import android.text.TextUtils; import android.text.util.Linkify; @@ -26,6 +28,9 @@ import androidx.annotation.Nullable; import androidx.annotation.StringRes; import androidx.appcompat.app.ActionBar; import androidx.core.text.util.LinkifyCompat; +import androidx.preference.PreferenceManager; + +import com.marcinorlowski.fonty.Fonty; import com.evernote.android.state.State; @@ -107,8 +112,19 @@ public class SubscriptionsImportFragment extends BaseFragment { public View onCreateView(@NonNull final LayoutInflater inflater, @Nullable final ViewGroup container, final Bundle savedInstanceState) { - return inflater.inflate(R.layout.fragment_import, container, false); + final View view = inflater.inflate(R.layout.fragment_import, container, false); + final String preferredFont = getPreferredFont(view.getContext()); + if (!preferredFont.equals(getString(R.string.default_font_key))) { + Fonty.setFonts((ViewGroup) view); + } + return view; } + public String getPreferredFont(final Context context) { + final SharedPreferences preferences = PreferenceManager + .getDefaultSharedPreferences(context); + return preferences.getString("preferred_font", getString(R.string.default_font_key)); + } + /*///////////////////////////////////////////////////////////////////////// // Fragment Views diff --git a/app/src/main/java/org/schabi/newpipe/local/subscription/dialog/FeedGroupDialog.kt b/app/src/main/java/org/schabi/newpipe/local/subscription/dialog/FeedGroupDialog.kt index 71c90e3c1..7dc7a573c 100644 --- a/app/src/main/java/org/schabi/newpipe/local/subscription/dialog/FeedGroupDialog.kt +++ b/app/src/main/java/org/schabi/newpipe/local/subscription/dialog/FeedGroupDialog.kt @@ -1,6 +1,7 @@ package org.schabi.newpipe.local.subscription.dialog import android.app.Dialog +import android.content.Context import android.os.Bundle import android.os.Parcelable import android.view.LayoutInflater @@ -16,10 +17,12 @@ import androidx.core.widget.doOnTextChanged import androidx.fragment.app.DialogFragment import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProvider +import androidx.preference.PreferenceManager import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.RecyclerView import com.evernote.android.state.State import com.livefront.bridge.Bridge +import com.marcinorlowski.fonty.Fonty // REVIEW up-10 import com.xwray.groupie.GroupieAdapter import com.xwray.groupie.OnItemClickListener import com.xwray.groupie.Section @@ -89,7 +92,17 @@ class FeedGroupDialog : DialogFragment(), BackPressable { container: ViewGroup?, savedInstanceState: Bundle? ): View? { - return inflater.inflate(R.layout.dialog_feed_group_create, container) + val curView = inflater.inflate(R.layout.dialog_feed_group_create, container) as ViewGroup + val preferredFont = getPreferredFont(curView.context) + if (!preferredFont.equals(getString(R.string.default_font_key))) { + Fonty.setFonts(curView) + } + return curView + } + fun getPreferredFont(context: Context?): String? { + val preferences = PreferenceManager + .getDefaultSharedPreferences(context!!) + return preferences.getString("preferred_font", getString(R.string.default_font_key)) } override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { diff --git a/app/src/main/java/org/schabi/newpipe/local/subscription/dialog/FeedGroupReorderDialog.kt b/app/src/main/java/org/schabi/newpipe/local/subscription/dialog/FeedGroupReorderDialog.kt index c087da464..512e72f49 100644 --- a/app/src/main/java/org/schabi/newpipe/local/subscription/dialog/FeedGroupReorderDialog.kt +++ b/app/src/main/java/org/schabi/newpipe/local/subscription/dialog/FeedGroupReorderDialog.kt @@ -1,5 +1,6 @@ package org.schabi.newpipe.local.subscription.dialog +import android.content.Context import android.os.Bundle import android.view.LayoutInflater import android.view.View @@ -7,12 +8,14 @@ import android.view.ViewGroup import androidx.fragment.app.DialogFragment import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProvider +import androidx.preference.PreferenceManager import androidx.recyclerview.widget.ItemTouchHelper import androidx.recyclerview.widget.ItemTouchHelper.SimpleCallback import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.evernote.android.state.State import com.livefront.bridge.Bridge +import com.marcinorlowski.fonty.Fonty // REVIEW up-10 import com.xwray.groupie.GroupieAdapter import com.xwray.groupie.TouchCallback import org.schabi.newpipe.R @@ -44,7 +47,18 @@ class FeedGroupReorderDialog : DialogFragment() { } override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { - return inflater.inflate(R.layout.dialog_feed_group_reorder, container) + val curView = (inflater.inflate(R.layout.dialog_feed_group_reorder, container)) as ViewGroup + val preferredFont = getPreferredFont(curView.context) + if (!preferredFont.equals(getString(R.string.default_font_key))) { + Fonty.setFonts(curView) + } + + return curView + } + fun getPreferredFont(context: Context?): String? { + val preferences = PreferenceManager + .getDefaultSharedPreferences(context!!) + return preferences.getString("preferred_font", getString(R.string.default_font_key)) } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { diff --git a/app/src/main/java/org/schabi/newpipe/player/PlayQueueActivity.java b/app/src/main/java/org/schabi/newpipe/player/PlayQueueActivity.java index d5627dd3b..cb0ccadf1 100644 --- a/app/src/main/java/org/schabi/newpipe/player/PlayQueueActivity.java +++ b/app/src/main/java/org/schabi/newpipe/player/PlayQueueActivity.java @@ -5,8 +5,10 @@ import static org.schabi.newpipe.player.helper.PlayerHelper.formatSpeed; import static org.schabi.newpipe.util.Localization.assureCorrectAppLanguage; import android.content.ComponentName; +import android.content.Context; import android.content.Intent; import android.content.ServiceConnection; +import android.content.SharedPreferences; import android.os.Bundle; import android.os.IBinder; import android.provider.Settings; @@ -21,11 +23,13 @@ import android.widget.SeekBar; import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; +import androidx.preference.PreferenceManager; import androidx.recyclerview.widget.ItemTouchHelper; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import com.google.android.exoplayer2.PlaybackParameters; +import com.marcinorlowski.fonty.Fonty; import org.schabi.newpipe.R; import org.schabi.newpipe.databinding.ActivityPlayerQueueControlBinding; @@ -85,6 +89,7 @@ public final class PlayQueueActivity extends AppCompatActivity @Override protected void onCreate(final Bundle savedInstanceState) { + final String preferredFont = getPreferredFont(this); assureCorrectAppLanguage(this); super.onCreate(savedInstanceState); ThemeHelper.setTheme(this, ServiceHelper.getSelectedServiceId(this)); @@ -100,6 +105,9 @@ public final class PlayQueueActivity extends AppCompatActivity serviceConnection = getServiceConnection(); bind(); + if (!preferredFont.equals(getString(R.string.default_font_key))) { + Fonty.setFonts(this); + } } @Override @@ -127,6 +135,12 @@ public final class PlayQueueActivity extends AppCompatActivity } return super.onPrepareOptionsMenu(m); } + public String getPreferredFont(final Context context) { + final SharedPreferences preferences = PreferenceManager + .getDefaultSharedPreferences(context); + return preferences.getString("preferred_font", (getString(R.string.default_font_key))); + } + @Override public boolean onOptionsItemSelected(final MenuItem item) { diff --git a/app/src/main/java/org/schabi/newpipe/settings/ContentSettingsFragment.java b/app/src/main/java/org/schabi/newpipe/settings/ContentSettingsFragment.java index ec2bed67a..bddfe2421 100644 --- a/app/src/main/java/org/schabi/newpipe/settings/ContentSettingsFragment.java +++ b/app/src/main/java/org/schabi/newpipe/settings/ContentSettingsFragment.java @@ -1,11 +1,13 @@ package org.schabi.newpipe.settings; import android.content.Context; +import android.content.SharedPreferences; import android.os.Bundle; import android.util.Log; import android.widget.Toast; import androidx.preference.Preference; +import androidx.preference.PreferenceManager; import org.schabi.newpipe.DownloaderImpl; import org.schabi.newpipe.R; @@ -22,6 +24,7 @@ public class ContentSettingsFragment extends BasePreferenceFragment { private String youtubeRestrictedModeEnabledKey; private Localization initialSelectedLocalization; + private String initialSelectedFont; private ContentCountry initialSelectedContentCountry; private String initialLanguage; @@ -36,7 +39,8 @@ public class ContentSettingsFragment extends BasePreferenceFragment { initialSelectedContentCountry = org.schabi.newpipe.util.Localization .getPreferredContentCountry(requireContext()); initialLanguage = defaultPreferences.getString(getString(R.string.app_language_key), "en"); - + initialSelectedFont = defaultPreferences + .getString(getString(R.string.app_font_key), getString(R.string.default_font_key)); final Preference imageQualityPreference = requirePreference(R.string.image_quality_key); imageQualityPreference.setOnPreferenceChangeListener( (preference, newValue) -> { @@ -78,7 +82,8 @@ public class ContentSettingsFragment extends BasePreferenceFragment { .getPreferredContentCountry(requireContext()); final String selectedLanguage = defaultPreferences.getString(getString(R.string.app_language_key), "en"); - + final String selectedFont = + defaultPreferences.getString(getString(R.string.app_font_key), "Arial"); if (!selectedLocalization.equals(initialSelectedLocalization) || !selectedContentCountry.equals(initialSelectedContentCountry) || !selectedLanguage.equals(initialLanguage)) { @@ -86,6 +91,14 @@ public class ContentSettingsFragment extends BasePreferenceFragment { Toast.LENGTH_LONG).show(); NewPipe.setupLocalization(selectedLocalization, selectedContentCountry); + } else if ((!selectedFont.equals(initialSelectedFont))) { + Toast.makeText(requireContext(), R.string.font_changes_requires_app_restart, + Toast.LENGTH_LONG).show(); + final SharedPreferences preferences = PreferenceManager + .getDefaultSharedPreferences(requireContext()); + final SharedPreferences.Editor editor = preferences.edit(); + editor.putString("preferred_font", selectedFont); + editor.apply(); } } } diff --git a/app/src/main/java/org/schabi/newpipe/settings/HistorySettingsFragment.java b/app/src/main/java/org/schabi/newpipe/settings/HistorySettingsFragment.java index 9bc9058c8..c9b633453 100644 --- a/app/src/main/java/org/schabi/newpipe/settings/HistorySettingsFragment.java +++ b/app/src/main/java/org/schabi/newpipe/settings/HistorySettingsFragment.java @@ -1,12 +1,14 @@ package org.schabi.newpipe.settings; import android.content.Context; +import android.content.SharedPreferences; import android.os.Bundle; import android.widget.Toast; import androidx.annotation.NonNull; import androidx.appcompat.app.AlertDialog; import androidx.preference.Preference; +import androidx.preference.PreferenceManager; import org.schabi.newpipe.DownloaderImpl; import org.schabi.newpipe.R; @@ -55,7 +57,11 @@ public class HistorySettingsFragment extends BasePreferenceFragment { clearCookiePref.setEnabled(false); } } - + public String getPreferredFont(final Context context) { + final SharedPreferences preferences = PreferenceManager + .getDefaultSharedPreferences(context); + return preferences.getString("preferred_font", (getString(R.string.default_font_key))); + } @Override public boolean onPreferenceTreeClick(final Preference preference) { if (preference.getKey().equals(cacheWipeKey)) { diff --git a/app/src/main/java/org/schabi/newpipe/settings/MainSettingsFragment.java b/app/src/main/java/org/schabi/newpipe/settings/MainSettingsFragment.java index a3b131d75..aef5ab332 100644 --- a/app/src/main/java/org/schabi/newpipe/settings/MainSettingsFragment.java +++ b/app/src/main/java/org/schabi/newpipe/settings/MainSettingsFragment.java @@ -1,11 +1,14 @@ package org.schabi.newpipe.settings; +import android.content.Context; +import android.content.SharedPreferences; import android.os.Bundle; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import androidx.annotation.NonNull; +import androidx.preference.PreferenceManager; import org.schabi.newpipe.MainActivity; import org.schabi.newpipe.R; @@ -49,7 +52,12 @@ public class MainSettingsFragment extends BasePreferenceFragment { return true; }); } - + public String getPreferredFont(final Context context) { + final SharedPreferences preferences = PreferenceManager + .getDefaultSharedPreferences(context); + // if no prefered font, return system default + return preferences.getString("preferred_font", getString(R.string.default_font_key)); + } @Override public void onDestroy() { // Unlink activity so that we don't get memory problems diff --git a/app/src/main/java/org/schabi/newpipe/settings/SelectPlaylistFragment.java b/app/src/main/java/org/schabi/newpipe/settings/SelectPlaylistFragment.java index 36abef9e5..a92ad4b71 100644 --- a/app/src/main/java/org/schabi/newpipe/settings/SelectPlaylistFragment.java +++ b/app/src/main/java/org/schabi/newpipe/settings/SelectPlaylistFragment.java @@ -2,6 +2,8 @@ package org.schabi.newpipe.settings; import static org.schabi.newpipe.local.bookmark.MergedPlaylistManager.getMergedOrderedPlaylists; +import android.content.Context; +import android.content.SharedPreferences; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; @@ -12,9 +14,12 @@ import android.widget.TextView; import androidx.annotation.NonNull; import androidx.fragment.app.DialogFragment; +import androidx.preference.PreferenceManager; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; +import com.marcinorlowski.fonty.Fonty; + import org.schabi.newpipe.NewPipeDatabase; import org.schabi.newpipe.R; import org.schabi.newpipe.database.AppDatabase; @@ -146,8 +151,18 @@ public class SelectPlaylistFragment extends DialogFragment { final int viewType) { final View item = LayoutInflater.from(parent.getContext()) .inflate(R.layout.list_playlist_mini_item, parent, false); + final String preferredFont = getPreferredFont(item.getContext()); + if (!preferredFont.equals(getString(R.string.default_font_key))) { + Fonty.setFonts((ViewGroup) item); + } return new SelectPlaylistItemHolder(item); } + public String getPreferredFont(final Context context) { + final SharedPreferences preferences = PreferenceManager + .getDefaultSharedPreferences(context); + return preferences.getString("preferred_font", (getString(R.string.default_font_key))); + } + @Override public void onBindViewHolder(@NonNull final SelectPlaylistItemHolder holder, diff --git a/app/src/main/java/org/schabi/newpipe/settings/SettingsActivity.java b/app/src/main/java/org/schabi/newpipe/settings/SettingsActivity.java index b5e65c6ba..5ee4f16d4 100644 --- a/app/src/main/java/org/schabi/newpipe/settings/SettingsActivity.java +++ b/app/src/main/java/org/schabi/newpipe/settings/SettingsActivity.java @@ -3,6 +3,7 @@ package org.schabi.newpipe.settings; import static org.schabi.newpipe.util.Localization.assureCorrectAppLanguage; import android.content.Context; +import android.content.SharedPreferences; import android.os.Bundle; import android.text.TextUtils; import android.util.Log; @@ -20,10 +21,12 @@ import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; import androidx.preference.Preference; import androidx.preference.PreferenceFragmentCompat; +import androidx.preference.PreferenceManager; import com.evernote.android.state.State; import com.jakewharton.rxbinding4.widget.RxTextView; import com.livefront.bridge.Bridge; +import com.marcinorlowski.fonty.Fonty; // REVIEW up-10 import org.schabi.newpipe.MainActivity; import org.schabi.newpipe.R; @@ -87,6 +90,7 @@ public class SettingsActivity extends AppCompatActivity implements @Override protected void onCreate(final Bundle savedInstanceBundle) { + setTheme(ThemeHelper.getSettingsThemeStyle(this)); assureCorrectAppLanguage(this); @@ -118,6 +122,10 @@ public class SettingsActivity extends AppCompatActivity implements if (DeviceUtils.isTv(this)) { FocusOverlayView.setupFocusObserver(this); } + final String preferredFont = getPreferredFont(this); + if (!preferredFont.equals(getString(R.string.default_font_key))) { + Fonty.setFonts(this); + } } @Override @@ -255,6 +263,12 @@ public class SettingsActivity extends AppCompatActivity implements } searchFragment.setSearcher(searcher); } + public String getPreferredFont(final Context context) { + final SharedPreferences preferences = PreferenceManager + .getDefaultSharedPreferences(context); + return preferences.getString("preferred_font", (getString(R.string.default_font_key))); + } + /** * Ensures that the search shows the correct/available search results. diff --git a/app/src/main/java/org/schabi/newpipe/util/FilePickerActivityHelper.java b/app/src/main/java/org/schabi/newpipe/util/FilePickerActivityHelper.java index d7fb39651..a8597d102 100644 --- a/app/src/main/java/org/schabi/newpipe/util/FilePickerActivityHelper.java +++ b/app/src/main/java/org/schabi/newpipe/util/FilePickerActivityHelper.java @@ -1,6 +1,7 @@ package org.schabi.newpipe.util; import android.content.Context; +import android.content.SharedPreferences; import android.net.Uri; import android.os.Bundle; import android.os.Environment; @@ -14,9 +15,11 @@ import android.widget.Toast; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.loader.content.Loader; +import androidx.preference.PreferenceManager; import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.SortedList; +import com.marcinorlowski.fonty.Fonty; import com.nononsenseapps.filepicker.AbstractFilePickerFragment; import com.nononsenseapps.filepicker.FilePickerFragment; @@ -36,12 +39,17 @@ public class FilePickerActivityHelper extends com.nononsenseapps.filepicker.File @Override public void onCreate(final Bundle savedInstanceState) { + final String preferredFont = getPreferredFont(this); if (ThemeHelper.isLightThemeSelected(this)) { this.setTheme(R.style.FilePickerThemeLight); } else { this.setTheme(R.style.FilePickerThemeDark); } super.onCreate(savedInstanceState); + + if (!preferredFont.equals(getString(R.string.default_font_key))) { + Fonty.setFonts(this); + } } @Override @@ -54,6 +62,13 @@ public class FilePickerActivityHelper extends com.nononsenseapps.filepicker.File currentFragment.goUp(); } } + public String getPreferredFont(final Context context) { + final SharedPreferences preferences = PreferenceManager + .getDefaultSharedPreferences(context); + return preferences.getString("preferred_font", (getString(R.string.default_font_key))); + } + + @Override protected AbstractFilePickerFragment getFragment(@Nullable final String startPath, diff --git a/app/src/main/java/us/shandian/giga/service/DownloadManagerService.java b/app/src/main/java/us/shandian/giga/service/DownloadManagerService.java index 45211211f..0e2c74dde 100755 --- a/app/src/main/java/us/shandian/giga/service/DownloadManagerService.java +++ b/app/src/main/java/us/shandian/giga/service/DownloadManagerService.java @@ -129,6 +129,7 @@ public class DownloadManagerService extends Service { @Override public void onCreate() { + super.onCreate(); if (DEBUG) { diff --git a/app/src/main/java/us/shandian/giga/ui/common/ToolbarActivity.java b/app/src/main/java/us/shandian/giga/ui/common/ToolbarActivity.java index 1542d3ff0..bc8578377 100644 --- a/app/src/main/java/us/shandian/giga/ui/common/ToolbarActivity.java +++ b/app/src/main/java/us/shandian/giga/ui/common/ToolbarActivity.java @@ -1,9 +1,14 @@ package us.shandian.giga.ui.common; +import android.content.Context; +import android.content.SharedPreferences; import android.os.Bundle; import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.widget.Toolbar; +import androidx.preference.PreferenceManager; + +import com.marcinorlowski.fonty.Fonty; import org.schabi.newpipe.R; @@ -12,13 +17,24 @@ public abstract class ToolbarActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { + final String preferredFont = getPreferredFont(this); super.onCreate(savedInstanceState); setContentView(getLayoutResource()); mToolbar = this.findViewById(R.id.toolbar); setSupportActionBar(mToolbar); + + if (!preferredFont.equals(getString(R.string.default_font_key))) { + Fonty.setFonts(this); + } } + public String getPreferredFont(final Context context) { + final SharedPreferences preferences = PreferenceManager + .getDefaultSharedPreferences(context); + return preferences.getString("preferred_font", (getString(R.string.default_font_key))); + } + protected abstract int getLayoutResource(); } diff --git a/app/src/main/res/layout-land/list_stream_card_item.xml b/app/src/main/res/layout-land/list_stream_card_item.xml index 793942568..5c5008ed2 100644 --- a/app/src/main/res/layout-land/list_stream_card_item.xml +++ b/app/src/main/res/layout-land/list_stream_card_item.xml @@ -92,3 +92,4 @@ app:layout_constraintTop_toBottomOf="@+id/itemThumbnailView" /> + \ No newline at end of file diff --git a/app/src/main/res/values/settings_keys.xml b/app/src/main/res/values/settings_keys.xml index 6858e5d62..d3e3f35e1 100644 --- a/app/src/main/res/values/settings_keys.xml +++ b/app/src/main/res/values/settings_keys.xml @@ -354,6 +354,8 @@ app_language_key + app_font_key + feed_update_threshold_key 300 feed_show_played_items @@ -502,6 +504,10 @@ system + + system + preferred_font + @string/default_localization_key @@ -1343,6 +1349,29 @@ 正體中文 + + + + + @string/default_localization_key + Calibri + Algerian + Broadway + Arial + Bell MT + Time New Roman + + + @string/systems_font + Calibri + Algerian + Broadway + Arial + Bell MT + Time New Roman + + + limit_mobile_data_usage limit_data_usage_none diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 0f862ef52..2047501cb 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -412,6 +412,7 @@ Do you want to also import settings? Could not load comments The language will change once the app is restarted + The font will change once the app is restarted Trending Top 50 @@ -660,6 +661,9 @@ Choose an instance App language System default + System default + App font + Remove watched Remove watched videos? Remove duplicates diff --git a/app/src/main/res/xml/content_settings.xml b/app/src/main/res/xml/content_settings.xml index 2cdc6c545..091db4664 100644 --- a/app/src/main/res/xml/content_settings.xml +++ b/app/src/main/res/xml/content_settings.xml @@ -33,6 +33,16 @@ app:iconSpaceReserved="false" app:useSimpleSummaryProvider="true" /> + +