mirror of
https://codeberg.org/Bazsalanszky/Infinity-For-Lemmy.git
synced 2024-11-07 03:07:26 +01:00
Add options to set custom fonts.
This commit is contained in:
parent
6f1cd194cb
commit
4d0b8b4672
@ -86,6 +86,7 @@ import ml.docilealligator.infinityforreddit.settings.CrashReportsFragment;
|
||||
import ml.docilealligator.infinityforreddit.settings.CustomizeBottomAppBarFragment;
|
||||
import ml.docilealligator.infinityforreddit.settings.CustomizeMainPageTabsFragment;
|
||||
import ml.docilealligator.infinityforreddit.settings.DownloadLocationPreferenceFragment;
|
||||
import ml.docilealligator.infinityforreddit.settings.FontPreferenceFragment;
|
||||
import ml.docilealligator.infinityforreddit.settings.GesturesAndButtonsPreferenceFragment;
|
||||
import ml.docilealligator.infinityforreddit.settings.MainPreferenceFragment;
|
||||
import ml.docilealligator.infinityforreddit.settings.MiscellaneousPreferenceFragment;
|
||||
@ -289,4 +290,6 @@ public interface AppComponent {
|
||||
void inject(EditProfileService editProfileService);
|
||||
|
||||
void inject(EditProfileActivity editProfileActivity);
|
||||
|
||||
void inject(FontPreferenceFragment fontPreferenceFragment);
|
||||
}
|
||||
|
@ -28,7 +28,6 @@ import org.greenrobot.eventbus.Subscribe;
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Named;
|
||||
|
||||
import ml.docilealligator.infinityforreddit.activities.BaseActivity;
|
||||
import ml.docilealligator.infinityforreddit.activities.LockScreenActivity;
|
||||
import ml.docilealligator.infinityforreddit.broadcastreceivers.NetworkWifiStatusReceiver;
|
||||
import ml.docilealligator.infinityforreddit.broadcastreceivers.WallpaperChangeReceiver;
|
||||
@ -39,15 +38,15 @@ import ml.docilealligator.infinityforreddit.utils.SharedPreferencesUtils;
|
||||
import ml.docilealligator.infinityforreddit.utils.Utils;
|
||||
|
||||
public class Infinity extends Application implements LifecycleObserver {
|
||||
public Typeface typeface;
|
||||
public Typeface titleTypeface;
|
||||
public Typeface contentTypeface;
|
||||
private AppComponent mAppComponent;
|
||||
private NetworkWifiStatusReceiver mNetworkWifiStatusReceiver;
|
||||
private boolean appLock;
|
||||
private long appLockTimeout;
|
||||
private boolean canStartLockScreenActivity = false;
|
||||
private boolean isSecureMode;
|
||||
private Typeface typeface;
|
||||
private Typeface titleTypeface;
|
||||
private Typeface contentTypeface;
|
||||
@Inject
|
||||
@Named("default")
|
||||
SharedPreferences mSharedPreferences;
|
||||
@ -70,9 +69,9 @@ public class Infinity extends Application implements LifecycleObserver {
|
||||
isSecureMode = mSecuritySharedPreferences.getBoolean(SharedPreferencesUtils.SECURE_MODE, false);
|
||||
|
||||
try {
|
||||
typeface = Typeface.createFromFile(getCacheDir() + "/opensans.ttf");
|
||||
titleTypeface = Typeface.createFromFile(getCacheDir() + "/opensans.ttf");
|
||||
contentTypeface = Typeface.createFromFile(getCacheDir() + "/opensans.ttf");
|
||||
typeface = Typeface.createFromFile(getExternalFilesDir("fonts") + "/font_family.ttf");
|
||||
titleTypeface = Typeface.createFromFile(getExternalFilesDir("fonts") + "/title_font_family.ttf");
|
||||
contentTypeface = Typeface.createFromFile(getExternalFilesDir("fonts") + "/content_font_family.ttf");
|
||||
} catch (RuntimeException e) {
|
||||
e.printStackTrace();
|
||||
Toast.makeText(this, "Some font files do not exist", Toast.LENGTH_SHORT).show();
|
||||
|
@ -360,7 +360,7 @@ public class PostImageActivity extends BaseActivity implements FlairBottomSheetF
|
||||
Intent intent = new Intent();
|
||||
intent.setType("image/*");
|
||||
intent.setAction(Intent.ACTION_GET_CONTENT);
|
||||
startActivityForResult(Intent.createChooser(intent, resources.getString(R.string.select_from_gallery)), PICK_IMAGE_REQUEST_CODE);
|
||||
startActivityForResult(Intent.createChooser(intent, getString(R.string.select_from_gallery)), PICK_IMAGE_REQUEST_CODE);
|
||||
});
|
||||
|
||||
selectAgainTextView.setOnClickListener(view -> {
|
||||
|
@ -16,7 +16,8 @@ public enum ContentFontFamily {
|
||||
InterBold(R.style.ContentFontFamily_InterBold, "InterBold"),
|
||||
Manrope(R.style.ContentFontFamily_Manrope, "Manrope"),
|
||||
ManropeBold(R.style.ContentFontFamily_ManropeBold, "ManropeBold"),
|
||||
Sriracha(R.style.ContentFontFamily_Sriracha, "Sriracha");
|
||||
Sriracha(R.style.ContentFontFamily_Sriracha, "Sriracha"),
|
||||
Custom(R.style.ContentFontFamily, "Custom");
|
||||
|
||||
private int resId;
|
||||
private String title;
|
||||
|
@ -16,7 +16,8 @@ public enum FontFamily {
|
||||
InterBold(R.style.FontFamily_InterBold, "InterBold"),
|
||||
Manrope(R.style.FontFamily_Manrope, "Manrope"),
|
||||
ManropeBold(R.style.FontFamily_ManropeBold, "ManropeBold"),
|
||||
Sriracha(R.style.FontFamily_Sriracha, "Sriracha");
|
||||
Sriracha(R.style.FontFamily_Sriracha, "Sriracha"),
|
||||
Custom(R.style.FontFamily, "Custom");
|
||||
|
||||
private int resId;
|
||||
private String title;
|
||||
|
@ -16,7 +16,8 @@ public enum TitleFontFamily {
|
||||
InterBold(R.style.TitleFontFamily_InterBold, "InterBold"),
|
||||
Manrope(R.style.TitleFontFamily_Manrope, "Manrope"),
|
||||
ManropeBold(R.style.TitleFontFamily_ManropeBold, "ManropeBold"),
|
||||
Sriracha(R.style.TitleFontFamily_Sriracha, "Sriracha");
|
||||
Sriracha(R.style.TitleFontFamily_Sriracha, "Sriracha"),
|
||||
Custom(R.style.TitleFontFamily, "Custom");
|
||||
|
||||
private int resId;
|
||||
private String title;
|
||||
|
@ -1,34 +1,90 @@
|
||||
package ml.docilealligator.infinityforreddit.settings;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.graphics.Typeface;
|
||||
import android.net.Uri;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.core.app.ActivityCompat;
|
||||
import androidx.documentfile.provider.DocumentFile;
|
||||
import androidx.preference.ListPreference;
|
||||
import androidx.preference.Preference;
|
||||
|
||||
import org.greenrobot.eventbus.EventBus;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.util.concurrent.Executor;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Named;
|
||||
|
||||
import ml.docilealligator.infinityforreddit.Infinity;
|
||||
import ml.docilealligator.infinityforreddit.R;
|
||||
import ml.docilealligator.infinityforreddit.customviews.CustomFontPreferenceFragmentCompat;
|
||||
import ml.docilealligator.infinityforreddit.events.RecreateActivityEvent;
|
||||
import ml.docilealligator.infinityforreddit.font.ContentFontFamily;
|
||||
import ml.docilealligator.infinityforreddit.font.FontFamily;
|
||||
import ml.docilealligator.infinityforreddit.font.TitleFontFamily;
|
||||
import ml.docilealligator.infinityforreddit.utils.SharedPreferencesUtils;
|
||||
|
||||
public class FontPreferenceFragment extends CustomFontPreferenceFragmentCompat {
|
||||
|
||||
private static final int CUSTOM_FONT_FAMILY_REQUEST_CODE = 20;
|
||||
private static final int CUSTOM_TITLE_FONT_FAMILY_REQUEST_CODE = 21;
|
||||
private static final int CUSTOM_CONTENT_FONT_FAMILY_REQUEST_CODE = 22;
|
||||
|
||||
@Inject
|
||||
@Named("default")
|
||||
SharedPreferences sharedPreferences;
|
||||
@Inject
|
||||
Executor executor;
|
||||
private Preference customFontFamilyPreference;
|
||||
private Preference customTitleFontFamilyPreference;
|
||||
private Preference customContentFontFamilyPreference;
|
||||
|
||||
@Override
|
||||
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
|
||||
setPreferencesFromResource(R.xml.font_preferences, rootKey);
|
||||
|
||||
((Infinity) activity.getApplication()).getAppComponent().inject(this);
|
||||
|
||||
if (activity.typeface != null) {
|
||||
setFont(activity.typeface);
|
||||
}
|
||||
|
||||
ListPreference fontFamilyPreference = findPreference(SharedPreferencesUtils.FONT_FAMILY_KEY);
|
||||
customFontFamilyPreference = findPreference(SharedPreferencesUtils.CUSTOM_FONT_FAMILY_KEY);
|
||||
ListPreference titleFontFamilyPreference = findPreference(SharedPreferencesUtils.TITLE_FONT_FAMILY_KEY);
|
||||
customTitleFontFamilyPreference = findPreference(SharedPreferencesUtils.CUSTOM_TITLE_FONT_FAMILY_KEY);
|
||||
ListPreference contentFontFamilyPreference = findPreference(SharedPreferencesUtils.CONTENT_FONT_FAMILY_KEY);
|
||||
customContentFontFamilyPreference = findPreference(SharedPreferencesUtils.CUSTOM_CONTENT_FONT_FAMILY_KEY);
|
||||
ListPreference fontSizePreference = findPreference(SharedPreferencesUtils.FONT_SIZE_KEY);
|
||||
ListPreference titleFontSizePreference = findPreference(SharedPreferencesUtils.TITLE_FONT_SIZE_KEY);
|
||||
ListPreference contentFontSizePreference = findPreference(SharedPreferencesUtils.CONTENT_FONT_SIZE_KEY);
|
||||
|
||||
if (customFontFamilyPreference != null) {
|
||||
if (sharedPreferences.getString(SharedPreferencesUtils.FONT_FAMILY_KEY, FontFamily.Default.name()).equals(FontFamily.Custom.name())) {
|
||||
customFontFamilyPreference.setVisible(true);
|
||||
}
|
||||
|
||||
customFontFamilyPreference.setOnPreferenceClickListener(preference -> {
|
||||
Intent intent = new Intent();
|
||||
intent.setType("*/*");
|
||||
intent.setAction(Intent.ACTION_GET_CONTENT);
|
||||
startActivityForResult(Intent.createChooser(intent, getString(R.string.select_a_ttf_font)), CUSTOM_FONT_FAMILY_REQUEST_CODE);
|
||||
return true;
|
||||
});
|
||||
}
|
||||
|
||||
if (fontFamilyPreference != null) {
|
||||
fontFamilyPreference.setOnPreferenceChangeListener((preference, newValue) -> {
|
||||
EventBus.getDefault().post(new RecreateActivityEvent());
|
||||
@ -37,6 +93,20 @@ public class FontPreferenceFragment extends CustomFontPreferenceFragmentCompat {
|
||||
});
|
||||
}
|
||||
|
||||
if (customTitleFontFamilyPreference != null) {
|
||||
if (sharedPreferences.getString(SharedPreferencesUtils.TITLE_FONT_FAMILY_KEY, TitleFontFamily.Default.name()).equals(TitleFontFamily.Custom.name())) {
|
||||
customTitleFontFamilyPreference.setVisible(true);
|
||||
}
|
||||
|
||||
customTitleFontFamilyPreference.setOnPreferenceClickListener(preference -> {
|
||||
Intent intent = new Intent();
|
||||
intent.setType("*/*");
|
||||
intent.setAction(Intent.ACTION_GET_CONTENT);
|
||||
startActivityForResult(Intent.createChooser(intent, getString(R.string.select_a_ttf_font)), CUSTOM_TITLE_FONT_FAMILY_REQUEST_CODE);
|
||||
return true;
|
||||
});
|
||||
}
|
||||
|
||||
if (titleFontFamilyPreference != null) {
|
||||
titleFontFamilyPreference.setOnPreferenceChangeListener((preference, newValue) -> {
|
||||
EventBus.getDefault().post(new RecreateActivityEvent());
|
||||
@ -44,6 +114,20 @@ public class FontPreferenceFragment extends CustomFontPreferenceFragmentCompat {
|
||||
});
|
||||
}
|
||||
|
||||
if (customContentFontFamilyPreference != null) {
|
||||
if (sharedPreferences.getString(SharedPreferencesUtils.CONTENT_FONT_FAMILY_KEY, ContentFontFamily.Default.name()).equals(ContentFontFamily.Custom.name())) {
|
||||
customContentFontFamilyPreference.setVisible(true);
|
||||
}
|
||||
|
||||
customContentFontFamilyPreference.setOnPreferenceClickListener(preference -> {
|
||||
Intent intent = new Intent();
|
||||
intent.setType("*/*");
|
||||
intent.setAction(Intent.ACTION_GET_CONTENT);
|
||||
startActivityForResult(Intent.createChooser(intent, getString(R.string.select_a_ttf_font)), CUSTOM_CONTENT_FONT_FAMILY_REQUEST_CODE);
|
||||
return true;
|
||||
});
|
||||
}
|
||||
|
||||
if (contentFontFamilyPreference != null) {
|
||||
contentFontFamilyPreference.setOnPreferenceChangeListener((preference, newValue) -> {
|
||||
EventBus.getDefault().post(new RecreateActivityEvent());
|
||||
@ -73,4 +157,100 @@ public class FontPreferenceFragment extends CustomFontPreferenceFragmentCompat {
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
|
||||
super.onActivityResult(requestCode, resultCode, data);
|
||||
if (resultCode == Activity.RESULT_OK && data != null && data.getData() != null) {
|
||||
if (requestCode == CUSTOM_FONT_FAMILY_REQUEST_CODE) {
|
||||
copyFontToInternalStorage(data.getData(), 0);
|
||||
if (customFontFamilyPreference != null) {
|
||||
customFontFamilyPreference.setSummary(data.getDataString());
|
||||
}
|
||||
} else if (requestCode == CUSTOM_TITLE_FONT_FAMILY_REQUEST_CODE) {
|
||||
copyFontToInternalStorage(data.getData(), 1);
|
||||
} else if (requestCode == CUSTOM_CONTENT_FONT_FAMILY_REQUEST_CODE) {
|
||||
copyFontToInternalStorage(data.getData(), 2);
|
||||
if (customContentFontFamilyPreference != null) {
|
||||
customContentFontFamilyPreference.setSummary(data.getDataString());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void copyFontToInternalStorage(Uri uri, int type) {
|
||||
String destinationFontName;
|
||||
switch (type) {
|
||||
case 1:
|
||||
destinationFontName = "title_font_family.ttf";
|
||||
break;
|
||||
case 2:
|
||||
destinationFontName = "content_font_family.ttf";
|
||||
break;
|
||||
default:
|
||||
destinationFontName = "font_family.ttf";
|
||||
}
|
||||
File fontDestinationPath = activity.getExternalFilesDir("fonts");
|
||||
|
||||
Handler handler = new Handler();
|
||||
|
||||
executor.execute(() -> {
|
||||
File destinationFontFile = new File(fontDestinationPath, destinationFontName);
|
||||
DocumentFile documentFile = DocumentFile.fromSingleUri(activity, uri);
|
||||
try (InputStream in = activity.getContentResolver().openInputStream(uri);
|
||||
OutputStream out = new FileOutputStream(destinationFontFile)) {
|
||||
if (in != null) {
|
||||
byte[] buf = new byte[1024];
|
||||
int len;
|
||||
while ((len = in.read(buf)) > 0) {
|
||||
out.write(buf, 0, len);
|
||||
}
|
||||
try {
|
||||
switch (type) {
|
||||
case 1:
|
||||
((Infinity) activity.getApplication()).titleTypeface = Typeface.createFromFile(destinationFontFile);
|
||||
break;
|
||||
case 2:
|
||||
((Infinity) activity.getApplication()).contentTypeface = Typeface.createFromFile(destinationFontFile);
|
||||
break;
|
||||
default:
|
||||
((Infinity) activity.getApplication()).typeface = Typeface.createFromFile(destinationFontFile);
|
||||
}
|
||||
} catch (RuntimeException e) {
|
||||
e.printStackTrace();
|
||||
handler.post(() -> Toast.makeText(activity, R.string.unable_to_load_font, Toast.LENGTH_SHORT).show());
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
handler.post(() -> Toast.makeText(activity, R.string.unable_to_get_font_file, Toast.LENGTH_SHORT).show());
|
||||
return;
|
||||
}
|
||||
handler.post(() -> {
|
||||
switch (type) {
|
||||
case 1:
|
||||
if (customTitleFontFamilyPreference != null) {
|
||||
customTitleFontFamilyPreference.setSummary(uri.toString());
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
if (customContentFontFamilyPreference != null) {
|
||||
customContentFontFamilyPreference.setSummary(uri.toString());
|
||||
}
|
||||
break;
|
||||
default:
|
||||
if (customFontFamilyPreference != null) {
|
||||
customFontFamilyPreference.setSummary(uri.toString());
|
||||
}
|
||||
}
|
||||
EventBus.getDefault().post(new RecreateActivityEvent());
|
||||
ActivityCompat.recreate(activity);
|
||||
});
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
handler.post(() -> {
|
||||
Toast.makeText(activity, R.string.unable_to_copy_font_file, Toast.LENGTH_SHORT).show();
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -40,6 +40,9 @@ public class SharedPreferencesUtils {
|
||||
public static final String VOTE_BUTTONS_ON_THE_RIGHT_KEY = "vote_buttons_on_the_right";
|
||||
public static final String SHOW_AVATAR_ON_THE_RIGHT = "show_avatar_on_the_right";
|
||||
public static final String DEFAULT_SEARCH_RESULT_TAB = "default_search_result_tab";
|
||||
public static final String CUSTOM_FONT_FAMILY_KEY = "custom_font_family";
|
||||
public static final String CUSTOM_TITLE_FONT_FAMILY_KEY = "custom_title_font_family";
|
||||
public static final String CUSTOM_CONTENT_FONT_FAMILY_KEY = "custom_content_font_family";
|
||||
|
||||
public static final String SORT_TYPE_SHARED_PREFERENCES_FILE = "ml.docilealligator.infinityforreddit.sort_type";
|
||||
public static final String SORT_TYPE_BEST_POST = "sort_type_best_post";
|
||||
|
@ -162,6 +162,7 @@
|
||||
<item>Manrope (No Italic)</item>
|
||||
<item>Manrope Bold (No Italic)</item>
|
||||
<item>Sriracha</item>
|
||||
<item>@string/settings_custom_font_family_title</item>
|
||||
</string-array>
|
||||
|
||||
<string-array name="settings_font_family_values">
|
||||
@ -179,6 +180,7 @@
|
||||
<item>Manrope</item>
|
||||
<item>ManropeBold</item>
|
||||
<item>Sriracha</item>
|
||||
<item>Custom</item>
|
||||
</string-array>
|
||||
|
||||
<string-array name="settings_tab_post_type">
|
||||
|
@ -619,6 +619,9 @@
|
||||
<string name="settings_legacy_autoplay_video_controller_ui_title">Legacy Video Controller UI</string>
|
||||
<string name="settings_pinch_to_zoom_video_title">Pinch to Zoom Video</string>
|
||||
<string name="settings_experimental_feature">Experimental feature</string>
|
||||
<string name="settings_custom_font_family_title">Custom Font Family</string>
|
||||
<string name="settings_custom_title_font_family_title">Custom Title Font Family</string>
|
||||
<string name="settings_custom_content_font_family_title">Custom Content Font Family</string>
|
||||
|
||||
<string name="no_link_available">Cannot get the link</string>
|
||||
|
||||
@ -1245,4 +1248,9 @@
|
||||
<string name="message_save_profile_success">Save profile successfully</string>
|
||||
<string name="message_save_profile_failed">Failed to save profile %s</string>
|
||||
|
||||
<string name="select_a_ttf_font">Select a ttf font file</string>
|
||||
<string name="unable_to_get_font_file">Unable to get your font</string>
|
||||
<string name="unable_to_load_font">Unable to load custom font</string>
|
||||
<string name="unable_to_copy_font_file">Unable to copy your font</string>
|
||||
|
||||
</resources>
|
||||
|
@ -17,6 +17,11 @@
|
||||
app:title="@string/settings_font_family_title"
|
||||
app:useSimpleSummaryProvider="true" />
|
||||
|
||||
<ml.docilealligator.infinityforreddit.customviews.CustomFontPreference
|
||||
app:title="@string/settings_custom_font_family_title"
|
||||
app:key="custom_font_family"
|
||||
app:isPreferenceVisible="false" />
|
||||
|
||||
<ml.docilealligator.infinityforreddit.customviews.CustomFontListPreference
|
||||
app:defaultValue="Normal"
|
||||
android:entries="@array/settings_font_size"
|
||||
@ -36,6 +41,11 @@
|
||||
app:title="@string/settings_title_font_family_title"
|
||||
app:useSimpleSummaryProvider="true" />
|
||||
|
||||
<ml.docilealligator.infinityforreddit.customviews.CustomFontPreference
|
||||
app:title="@string/settings_custom_title_font_family_title"
|
||||
app:key="custom_title_font_family"
|
||||
app:isPreferenceVisible="false" />
|
||||
|
||||
<ml.docilealligator.infinityforreddit.customviews.CustomFontListPreference
|
||||
app:defaultValue="Normal"
|
||||
android:entries="@array/settings_title_font_size"
|
||||
@ -55,6 +65,11 @@
|
||||
app:title="@string/settings_content_font_family_title"
|
||||
app:useSimpleSummaryProvider="true" />
|
||||
|
||||
<ml.docilealligator.infinityforreddit.customviews.CustomFontPreference
|
||||
app:title="@string/settings_custom_content_font_family_title"
|
||||
app:key="custom_content_font_family"
|
||||
app:isPreferenceVisible="false" />
|
||||
|
||||
<ml.docilealligator.infinityforreddit.customviews.CustomFontListPreference
|
||||
app:defaultValue="Normal"
|
||||
android:entries="@array/settings_content_font_size"
|
||||
|
Loading…
Reference in New Issue
Block a user