mirror of
https://github.com/gsantner/dandelion
synced 2024-11-22 04:12:08 +01:00
Change package ID of gsantner/opoc
This commit is contained in:
parent
b3129e0e91
commit
15a34a1895
20 changed files with 360 additions and 77 deletions
|
@ -34,7 +34,7 @@ import com.github.dfa.diaspora_android.util.AppLog;
|
||||||
import com.github.dfa.diaspora_android.util.AppSettings;
|
import com.github.dfa.diaspora_android.util.AppSettings;
|
||||||
import com.github.dfa.diaspora_android.util.DiasporaUrlHelper;
|
import com.github.dfa.diaspora_android.util.DiasporaUrlHelper;
|
||||||
|
|
||||||
import io.github.gsantner.opoc.util.AdBlock;
|
import net.gsantner.opoc.util.AdBlock;
|
||||||
|
|
||||||
public class App extends Application {
|
public class App extends Application {
|
||||||
private volatile static App app;
|
private volatile static App app;
|
||||||
|
|
|
@ -52,7 +52,7 @@ import com.github.dfa.diaspora_android.ui.theme.ThemedActivity;
|
||||||
import com.github.dfa.diaspora_android.ui.theme.ThemedFragment;
|
import com.github.dfa.diaspora_android.ui.theme.ThemedFragment;
|
||||||
import com.github.dfa.diaspora_android.util.AppLog;
|
import com.github.dfa.diaspora_android.util.AppLog;
|
||||||
import com.github.dfa.diaspora_android.util.AppSettings;
|
import com.github.dfa.diaspora_android.util.AppSettings;
|
||||||
import com.github.dfa.diaspora_android.util.Helpers;
|
import com.github.dfa.diaspora_android.util.ContextUtils;
|
||||||
|
|
||||||
import java.util.Observable;
|
import java.util.Observable;
|
||||||
import java.util.Observer;
|
import java.util.Observer;
|
||||||
|
@ -212,13 +212,13 @@ public class AboutActivity extends ThemedActivity
|
||||||
public void buttonClicked(View view) {
|
public void buttonClicked(View view) {
|
||||||
switch (view.getId()) {
|
switch (view.getId()) {
|
||||||
case R.id.fragment_about__contribute_button:
|
case R.id.fragment_about__contribute_button:
|
||||||
Helpers.get().openWebpageInExternalBrowser(getString(R.string.fragment_about__contribute_link));
|
ContextUtils.get().openWebpageInExternalBrowser(getString(R.string.fragment_about__contribute_link));
|
||||||
break;
|
break;
|
||||||
case R.id.fragment_about__translate_button:
|
case R.id.fragment_about__translate_button:
|
||||||
Helpers.get().openWebpageInExternalBrowser(getString(R.string.fragment_about__translate_link));
|
ContextUtils.get().openWebpageInExternalBrowser(getString(R.string.fragment_about__translate_link));
|
||||||
break;
|
break;
|
||||||
case R.id.fragment_about__feedback_button:
|
case R.id.fragment_about__feedback_button:
|
||||||
Helpers.get().openWebpageInExternalBrowser(getString(R.string.fragment_About__feedback_link));
|
ContextUtils.get().openWebpageInExternalBrowser(getString(R.string.fragment_About__feedback_link));
|
||||||
break;
|
break;
|
||||||
case R.id.fragment_about__spread_the_word_button:
|
case R.id.fragment_about__spread_the_word_button:
|
||||||
Intent sharingIntent = new Intent(android.content.Intent.ACTION_SEND);
|
Intent sharingIntent = new Intent(android.content.Intent.ACTION_SEND);
|
||||||
|
@ -263,14 +263,14 @@ public class AboutActivity extends ThemedActivity
|
||||||
View rootView = inflater.inflate(R.layout.about__fragment_license, container, false);
|
View rootView = inflater.inflate(R.layout.about__fragment_license, container, false);
|
||||||
ButterKnife.bind(this, rootView);
|
ButterKnife.bind(this, rootView);
|
||||||
final Context context = rootView.getContext();
|
final Context context = rootView.getContext();
|
||||||
accentColor = Helpers.get().colorToHexString(ThemeHelper.getAccentColor());
|
accentColor = ContextUtils.get().colorToHexString(ThemeHelper.getAccentColor());
|
||||||
|
|
||||||
maintainers.setTextFormatted(getString(R.string.fragment_license__maintainers_text,
|
maintainers.setTextFormatted(getString(R.string.fragment_license__maintainers_text,
|
||||||
Helpers.get().loadMarkdownForTextViewFromRaw(R.raw.maintainers, "")));
|
ContextUtils.get().loadMarkdownForTextViewFromRaw(R.raw.maintainers, "")));
|
||||||
contributors.setTextFormatted(getString(R.string.fragment_license__contributors_thank_you,
|
contributors.setTextFormatted(getString(R.string.fragment_license__contributors_thank_you,
|
||||||
Helpers.get().loadMarkdownForTextViewFromRaw(R.raw.contributors, "")));
|
ContextUtils.get().loadMarkdownForTextViewFromRaw(R.raw.contributors, "")));
|
||||||
thirdPartyLibs.setTextFormatted(
|
thirdPartyLibs.setTextFormatted(
|
||||||
Helpers.get().loadMarkdownForTextViewFromRaw(R.raw.license_third_party, ""));
|
ContextUtils.get().loadMarkdownForTextViewFromRaw(R.raw.license_third_party, ""));
|
||||||
return rootView;
|
return rootView;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -278,10 +278,10 @@ public class AboutActivity extends ThemedActivity
|
||||||
public void buttonClicked(View v) {
|
public void buttonClicked(View v) {
|
||||||
switch (v.getId()) {
|
switch (v.getId()) {
|
||||||
case R.id.fragment_license__leafpic_button:
|
case R.id.fragment_license__leafpic_button:
|
||||||
Helpers.get().openWebpageInExternalBrowser(getString(R.string.fragment_licesen__misc_leafpic_link));
|
ContextUtils.get().openWebpageInExternalBrowser(getString(R.string.fragment_licesen__misc_leafpic_link));
|
||||||
break;
|
break;
|
||||||
case R.id.fragment_license__license_button:
|
case R.id.fragment_license__license_button:
|
||||||
Helpers.get().openWebpageInExternalBrowser(getString(R.string.fragment_license__license_gpl_link));
|
ContextUtils.get().openWebpageInExternalBrowser(getString(R.string.fragment_license__license_gpl_link));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,7 +41,7 @@ import com.github.dfa.diaspora_android.ui.theme.ThemedFragment;
|
||||||
import com.github.dfa.diaspora_android.util.AppLog;
|
import com.github.dfa.diaspora_android.util.AppLog;
|
||||||
import com.github.dfa.diaspora_android.util.AppSettings;
|
import com.github.dfa.diaspora_android.util.AppSettings;
|
||||||
import com.github.dfa.diaspora_android.util.DiasporaUrlHelper;
|
import com.github.dfa.diaspora_android.util.DiasporaUrlHelper;
|
||||||
import com.github.dfa.diaspora_android.util.Helpers;
|
import com.github.dfa.diaspora_android.util.ContextUtils;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
@ -174,7 +174,7 @@ public class AspectListFragment extends ThemedFragment implements OnSomethingCli
|
||||||
final DiasporaAspect aspect = aspectList[position];
|
final DiasporaAspect aspect = aspectList[position];
|
||||||
holder.title.setText(aspect.name);
|
holder.title.setText(aspect.name);
|
||||||
if (position % 2 == 1) {
|
if (position % 2 == 1) {
|
||||||
holder.root.setBackgroundColor(isAmoledColorMode ? Color.BLACK : Helpers.get().color(R.color.alternate_row_color));
|
holder.root.setBackgroundColor(isAmoledColorMode ? Color.BLACK : ContextUtils.get().color(R.color.alternate_row_color));
|
||||||
holder.title.setTextColor(isAmoledColorMode ? Color.GRAY : Color.BLACK);
|
holder.title.setTextColor(isAmoledColorMode ? Color.GRAY : Color.BLACK);
|
||||||
} else {
|
} else {
|
||||||
holder.root.setBackgroundColor(isAmoledColorMode ? Color.BLACK : Color.WHITE);
|
holder.root.setBackgroundColor(isAmoledColorMode ? Color.BLACK : Color.WHITE);
|
||||||
|
|
|
@ -45,7 +45,7 @@ import com.github.dfa.diaspora_android.data.DiasporaUserProfile;
|
||||||
import com.github.dfa.diaspora_android.ui.theme.ThemedAlertDialogBuilder;
|
import com.github.dfa.diaspora_android.ui.theme.ThemedAlertDialogBuilder;
|
||||||
import com.github.dfa.diaspora_android.util.AppLog;
|
import com.github.dfa.diaspora_android.util.AppLog;
|
||||||
import com.github.dfa.diaspora_android.util.DiasporaUrlHelper;
|
import com.github.dfa.diaspora_android.util.DiasporaUrlHelper;
|
||||||
import com.github.dfa.diaspora_android.util.Helpers;
|
import com.github.dfa.diaspora_android.util.ContextUtils;
|
||||||
import com.github.dfa.diaspora_android.web.BrowserFragment;
|
import com.github.dfa.diaspora_android.web.BrowserFragment;
|
||||||
import com.github.dfa.diaspora_android.web.DiasporaStreamWebChromeClient;
|
import com.github.dfa.diaspora_android.web.DiasporaStreamWebChromeClient;
|
||||||
import com.github.dfa.diaspora_android.web.FileUploadWebChromeClient;
|
import com.github.dfa.diaspora_android.web.FileUploadWebChromeClient;
|
||||||
|
@ -271,7 +271,7 @@ public class DiasporaStreamFragment extends BrowserFragment {
|
||||||
// Create the File where the photo should go
|
// Create the File where the photo should go
|
||||||
File photoFile;
|
File photoFile;
|
||||||
try {
|
try {
|
||||||
photoFile = Helpers.get().createImageFile();
|
photoFile = ContextUtils.get().createImageFile();
|
||||||
takePictureIntent.putExtra("PhotoPath", mCameraPhotoPath);
|
takePictureIntent.putExtra("PhotoPath", mCameraPhotoPath);
|
||||||
} catch (IOException ex) {
|
} catch (IOException ex) {
|
||||||
AppLog.e(this, "ERROR creating temp file: " + ex.toString());
|
AppLog.e(this, "ERROR creating temp file: " + ex.toString());
|
||||||
|
|
|
@ -78,7 +78,7 @@ import com.github.dfa.diaspora_android.ui.theme.ThemedAlertDialogBuilder;
|
||||||
import com.github.dfa.diaspora_android.util.AppLog;
|
import com.github.dfa.diaspora_android.util.AppLog;
|
||||||
import com.github.dfa.diaspora_android.util.AppSettings;
|
import com.github.dfa.diaspora_android.util.AppSettings;
|
||||||
import com.github.dfa.diaspora_android.util.DiasporaUrlHelper;
|
import com.github.dfa.diaspora_android.util.DiasporaUrlHelper;
|
||||||
import com.github.dfa.diaspora_android.util.HelpersA;
|
import com.github.dfa.diaspora_android.util.ActivityUtils;
|
||||||
import com.github.dfa.diaspora_android.web.BrowserFragment;
|
import com.github.dfa.diaspora_android.web.BrowserFragment;
|
||||||
import com.github.dfa.diaspora_android.web.ContextMenuWebView;
|
import com.github.dfa.diaspora_android.web.ContextMenuWebView;
|
||||||
import com.github.dfa.diaspora_android.web.ProxyHandler;
|
import com.github.dfa.diaspora_android.web.ProxyHandler;
|
||||||
|
@ -90,7 +90,7 @@ import java.io.IOException;
|
||||||
import butterknife.BindView;
|
import butterknife.BindView;
|
||||||
import butterknife.ButterKnife;
|
import butterknife.ButterKnife;
|
||||||
import butterknife.OnClick;
|
import butterknife.OnClick;
|
||||||
import io.github.gsantner.opoc.util.SimpleMarkdownParser;
|
import net.gsantner.opoc.util.SimpleMarkdownParser;
|
||||||
|
|
||||||
public class MainActivity extends ThemedActivity
|
public class MainActivity extends ThemedActivity
|
||||||
implements NavigationView.OnNavigationItemSelectedListener,
|
implements NavigationView.OnNavigationItemSelectedListener,
|
||||||
|
@ -230,12 +230,12 @@ public class MainActivity extends ThemedActivity
|
||||||
+ "<h1>" + getString(R.string.fragment_license__thirdparty_libs) + "</h1>"
|
+ "<h1>" + getString(R.string.fragment_license__thirdparty_libs) + "</h1>"
|
||||||
+ mdParser.parse(getResources().openRawResource(R.raw.license_third_party), "");
|
+ mdParser.parse(getResources().openRawResource(R.raw.license_third_party), "");
|
||||||
html = mdParser.setHtml(html).removeMultiNewlines().getHtml();
|
html = mdParser.setHtml(html).removeMultiNewlines().getHtml();
|
||||||
HelpersA.get(this).showDialogWithHtmlTextView(R.string.about_activity__title_about_license, html);
|
ActivityUtils.get(this).showDialogWithHtmlTextView(R.string.about_activity__title_about_license, html);
|
||||||
appSettings.isAppCurrentVersionFirstStart();
|
appSettings.isAppCurrentVersionFirstStart();
|
||||||
} else if (appSettings.isAppCurrentVersionFirstStart()) {
|
} else if (appSettings.isAppCurrentVersionFirstStart()) {
|
||||||
SimpleMarkdownParser smp = new SimpleMarkdownParser().parse(
|
SimpleMarkdownParser smp = new SimpleMarkdownParser().parse(
|
||||||
getResources().openRawResource(R.raw.changelog), "");
|
getResources().openRawResource(R.raw.changelog), "");
|
||||||
HelpersA.get(this).showDialogWithHtmlTextView(R.string.changelog, smp.getHtml());
|
ActivityUtils.get(this).showDialogWithHtmlTextView(R.string.changelog, smp.getHtml());
|
||||||
}
|
}
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
|
|
|
@ -55,8 +55,8 @@ import com.github.dfa.diaspora_android.ui.theme.ThemedFragment;
|
||||||
import com.github.dfa.diaspora_android.util.AppLog;
|
import com.github.dfa.diaspora_android.util.AppLog;
|
||||||
import com.github.dfa.diaspora_android.util.AppSettings;
|
import com.github.dfa.diaspora_android.util.AppSettings;
|
||||||
import com.github.dfa.diaspora_android.util.DiasporaUrlHelper;
|
import com.github.dfa.diaspora_android.util.DiasporaUrlHelper;
|
||||||
import com.github.dfa.diaspora_android.util.Helpers;
|
import com.github.dfa.diaspora_android.util.ContextUtils;
|
||||||
import com.github.dfa.diaspora_android.util.HelpersA;
|
import com.github.dfa.diaspora_android.util.ActivityUtils;
|
||||||
|
|
||||||
import org.json.JSONException;
|
import org.json.JSONException;
|
||||||
import org.json.JSONObject;
|
import org.json.JSONObject;
|
||||||
|
@ -129,11 +129,11 @@ public class PodSelectionFragment extends ThemedFragment implements SearchView.O
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
LocalBroadcastManager.getInstance(getContext()).registerReceiver(podListReceiver, new IntentFilter(FetchPodsService.MESSAGE_PODS_RECEIVED));
|
LocalBroadcastManager.getInstance(getContext()).registerReceiver(podListReceiver, new IntentFilter(FetchPodsService.MESSAGE_PODS_RECEIVED));
|
||||||
HelpersA.get(getActivity()).showInfoIfUserNotConnectedToInternet(listViewPod);
|
ActivityUtils.get(getActivity()).showInfoIfUserNotConnectedToInternet(listViewPod);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void mergePodlistWithRessources(DiasporaPodList podlist) {
|
public void mergePodlistWithRessources(DiasporaPodList podlist) {
|
||||||
String sPodlist = Helpers.get().readTextfileFromRawRes(R.raw.podlist, "", "");
|
String sPodlist = ContextUtils.get().readTextfileFromRawRes(R.raw.podlist, "", "");
|
||||||
try {
|
try {
|
||||||
JSONObject jPodlist = new JSONObject(sPodlist);
|
JSONObject jPodlist = new JSONObject(sPodlist);
|
||||||
podlist.mergeWithNewerEntries(new DiasporaPodList().fromJson(jPodlist));
|
podlist.mergeWithNewerEntries(new DiasporaPodList().fromJson(jPodlist));
|
||||||
|
@ -182,7 +182,7 @@ public class PodSelectionFragment extends ThemedFragment implements SearchView.O
|
||||||
buttonUseCustomPod.setTextColor(Color.WHITE);
|
buttonUseCustomPod.setTextColor(Color.WHITE);
|
||||||
} else {
|
} else {
|
||||||
buttonUseCustomPod.setSupportBackgroundTintList(ColorStateList.valueOf(appSettings.getAccentColor()));
|
buttonUseCustomPod.setSupportBackgroundTintList(ColorStateList.valueOf(appSettings.getAccentColor()));
|
||||||
buttonUseCustomPod.setTextColor(Helpers.get().shouldColorOnTopBeLight(appSettings.getAccentColor()) ? Color.WHITE : Color.BLACK);
|
buttonUseCustomPod.setTextColor(ContextUtils.get().shouldColorOnTopBeLight(appSettings.getAccentColor()) ? Color.WHITE : Color.BLACK);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -250,7 +250,7 @@ public class PodSelectionFragment extends ThemedFragment implements SearchView.O
|
||||||
public boolean onOptionsItemSelected(MenuItem item) {
|
public boolean onOptionsItemSelected(MenuItem item) {
|
||||||
switch (item.getItemId()) {
|
switch (item.getItemId()) {
|
||||||
case R.id.action_reload: {
|
case R.id.action_reload: {
|
||||||
if (!HelpersA.get(getActivity()).showInfoIfUserNotConnectedToInternet(listViewPod)) {
|
if (!ActivityUtils.get(getActivity()).showInfoIfUserNotConnectedToInternet(listViewPod)) {
|
||||||
Intent i = new Intent(getContext(), FetchPodsService.class);
|
Intent i = new Intent(getContext(), FetchPodsService.class);
|
||||||
getContext().startService(i);
|
getContext().startService(i);
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -40,7 +40,7 @@ import com.github.dfa.diaspora_android.ui.theme.ThemedFragment;
|
||||||
import com.github.dfa.diaspora_android.util.AppLog;
|
import com.github.dfa.diaspora_android.util.AppLog;
|
||||||
import com.github.dfa.diaspora_android.util.AppSettings;
|
import com.github.dfa.diaspora_android.util.AppSettings;
|
||||||
import com.github.dfa.diaspora_android.util.DiasporaUrlHelper;
|
import com.github.dfa.diaspora_android.util.DiasporaUrlHelper;
|
||||||
import com.github.dfa.diaspora_android.util.Helpers;
|
import com.github.dfa.diaspora_android.util.ContextUtils;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
@ -173,7 +173,7 @@ public class TagListFragment extends ThemedFragment implements OnSomethingClickL
|
||||||
final String tag = followedTagsList[position];
|
final String tag = followedTagsList[position];
|
||||||
holder.title.setText(tag);
|
holder.title.setText(tag);
|
||||||
if (position % 2 == 1) {
|
if (position % 2 == 1) {
|
||||||
holder.root.setBackgroundColor(isAmoledColorMode ? Color.BLACK : Helpers.get().color(R.color.alternate_row_color));
|
holder.root.setBackgroundColor(isAmoledColorMode ? Color.BLACK : ContextUtils.get().color(R.color.alternate_row_color));
|
||||||
holder.title.setTextColor(isAmoledColorMode ? Color.GRAY : Color.BLACK);
|
holder.title.setTextColor(isAmoledColorMode ? Color.GRAY : Color.BLACK);
|
||||||
} else {
|
} else {
|
||||||
holder.root.setBackgroundColor(isAmoledColorMode ? Color.BLACK : Color.WHITE);
|
holder.root.setBackgroundColor(isAmoledColorMode ? Color.BLACK : Color.WHITE);
|
||||||
|
|
|
@ -32,7 +32,7 @@ import android.support.annotation.NonNull;
|
||||||
|
|
||||||
import com.github.dfa.diaspora_android.R;
|
import com.github.dfa.diaspora_android.R;
|
||||||
import com.github.dfa.diaspora_android.util.AppSettings;
|
import com.github.dfa.diaspora_android.util.AppSettings;
|
||||||
import com.github.dfa.diaspora_android.util.Helpers;
|
import com.github.dfa.diaspora_android.util.ContextUtils;
|
||||||
|
|
||||||
@SuppressWarnings("WeakerAccess")
|
@SuppressWarnings("WeakerAccess")
|
||||||
public class BadgeDrawable extends Drawable {
|
public class BadgeDrawable extends Drawable {
|
||||||
|
@ -56,7 +56,7 @@ public class BadgeDrawable extends Drawable {
|
||||||
_badgeBackground.setStyle(Paint.Style.FILL);
|
_badgeBackground.setStyle(Paint.Style.FILL);
|
||||||
|
|
||||||
_badgeText = new Paint();
|
_badgeText = new Paint();
|
||||||
_badgeText.setColor(Helpers.get().shouldColorOnTopBeLight(settings.getAccentColor()) ? Color.WHITE : Color.BLACK);
|
_badgeText.setColor(ContextUtils.get().shouldColorOnTopBeLight(settings.getAccentColor()) ? Color.WHITE : Color.BLACK);
|
||||||
_badgeText.setTypeface(Typeface.DEFAULT);
|
_badgeText.setTypeface(Typeface.DEFAULT);
|
||||||
_badgeText.setTextSize(textSize);
|
_badgeText.setTextSize(textSize);
|
||||||
_badgeText.setAntiAlias(true);
|
_badgeText.setAntiAlias(true);
|
||||||
|
@ -71,7 +71,7 @@ public class BadgeDrawable extends Drawable {
|
||||||
Rect bounds = getBounds();
|
Rect bounds = getBounds();
|
||||||
float width = bounds.right - bounds.left;
|
float width = bounds.right - bounds.left;
|
||||||
float height = bounds.bottom - bounds.top;
|
float height = bounds.bottom - bounds.top;
|
||||||
float oneDp = Helpers.get().dp2px(1);
|
float oneDp = ContextUtils.get().dp2px(1);
|
||||||
|
|
||||||
// Position the badge in the top-right quadrant of the icon.
|
// Position the badge in the top-right quadrant of the icon.
|
||||||
float radius = ((Math.max(width, height) / 2)) / 2;
|
float radius = ((Math.max(width, height) / 2)) / 2;
|
||||||
|
|
|
@ -29,7 +29,7 @@ import android.support.v7.app.AppCompatActivity;
|
||||||
import com.github.dfa.diaspora_android.App;
|
import com.github.dfa.diaspora_android.App;
|
||||||
import com.github.dfa.diaspora_android.R;
|
import com.github.dfa.diaspora_android.R;
|
||||||
import com.github.dfa.diaspora_android.util.AppSettings;
|
import com.github.dfa.diaspora_android.util.AppSettings;
|
||||||
import com.github.dfa.diaspora_android.util.Helpers;
|
import com.github.dfa.diaspora_android.util.ContextUtils;
|
||||||
|
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
|
||||||
|
@ -99,7 +99,7 @@ public abstract class ThemedActivity extends AppCompatActivity {
|
||||||
|
|
||||||
public void updateLanguage() {
|
public void updateLanguage() {
|
||||||
AppSettings appSettings = getAppSettings();
|
AppSettings appSettings = getAppSettings();
|
||||||
Locale locale = Helpers.get().getLocaleByAndroidCode(appSettings.getLanguage());
|
Locale locale = ContextUtils.get().getLocaleByAndroidCode(appSettings.getLanguage());
|
||||||
Configuration config = appSettings.getContext().getResources().getConfiguration();
|
Configuration config = appSettings.getContext().getResources().getConfiguration();
|
||||||
config.locale = locale != null ? locale : Locale.getDefault();
|
config.locale = locale != null ? locale : Locale.getDefault();
|
||||||
appSettings.getContext().getResources().updateConfiguration(config, null);
|
appSettings.getContext().getResources().updateConfiguration(config, null);
|
||||||
|
|
|
@ -10,7 +10,7 @@ import android.widget.ImageView;
|
||||||
|
|
||||||
import com.github.dfa.diaspora_android.R;
|
import com.github.dfa.diaspora_android.R;
|
||||||
import com.github.dfa.diaspora_android.util.AppSettings;
|
import com.github.dfa.diaspora_android.util.AppSettings;
|
||||||
import com.github.dfa.diaspora_android.util.Helpers;
|
import com.github.dfa.diaspora_android.util.ContextUtils;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Preference that shows selected Color in a circle
|
* Preference that shows selected Color in a circle
|
||||||
|
@ -50,7 +50,7 @@ public class ThemedColorPickerPreference extends Preference implements Themeable
|
||||||
AppSettings appSettings = AppSettings.get();
|
AppSettings appSettings = AppSettings.get();
|
||||||
String key = getKey();
|
String key = getKey();
|
||||||
|
|
||||||
int color = Helpers.get().color(R.color.primary);
|
int color = ContextUtils.get().color(R.color.primary);
|
||||||
if ((appSettings.isKeyEqual(key, R.string.pref_key__primary_color_shade))) {
|
if ((appSettings.isKeyEqual(key, R.string.pref_key__primary_color_shade))) {
|
||||||
color = appSettings.getPrimaryColor();
|
color = appSettings.getPrimaryColor();
|
||||||
} else if ((appSettings.isKeyEqual(key, R.string.pref_key__accent_color_shade))) {
|
} else if ((appSettings.isKeyEqual(key, R.string.pref_key__accent_color_shade))) {
|
||||||
|
|
|
@ -16,21 +16,21 @@ import java.util.Date;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
|
||||||
@SuppressWarnings({"WeakerAccess", "unused", "SameParameterValue"})
|
@SuppressWarnings({"WeakerAccess", "unused", "SameParameterValue"})
|
||||||
public class HelpersA extends io.github.gsantner.opoc.util.HelpersA {
|
public class ActivityUtils extends net.gsantner.opoc.util.ActivityUtils {
|
||||||
protected HelpersA(Activity activity) {
|
protected ActivityUtils(Activity activity) {
|
||||||
super(activity);
|
super(activity);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public static HelpersA get(Activity activity) {
|
public static ActivityUtils get(Activity activity) {
|
||||||
return new HelpersA(activity);
|
return new ActivityUtils(activity);
|
||||||
}
|
}
|
||||||
|
|
||||||
public File createImageFile() throws IOException {
|
public File createImageFile() throws IOException {
|
||||||
// Create an image file name
|
// Create an image file name
|
||||||
String timeStamp = new SimpleDateFormat("dd-MM-yy_HH-mm", Locale.getDefault()).format(new Date());
|
String timeStamp = new SimpleDateFormat("dd-MM-yy_HH-mm", Locale.getDefault()).format(new Date());
|
||||||
String imageFileName = "JPEG_" + timeStamp + "_";
|
String imageFileName = "JPEG_" + timeStamp + "_";
|
||||||
AppLog.d(HelpersA.class, Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).getAbsolutePath());
|
AppLog.d(ActivityUtils.class, Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).getAbsolutePath());
|
||||||
File storageDir = Environment.getExternalStoragePublicDirectory(
|
File storageDir = Environment.getExternalStoragePublicDirectory(
|
||||||
Environment.DIRECTORY_PICTURES);
|
Environment.DIRECTORY_PICTURES);
|
||||||
return new File(
|
return new File(
|
|
@ -31,7 +31,7 @@ import org.json.JSONObject;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import io.github.gsantner.opoc.util.AppSettingsBase;
|
import net.gsantner.opoc.util.AppSettingsBase;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Settings
|
* Settings
|
||||||
|
|
|
@ -14,21 +14,21 @@ import java.util.Date;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
|
||||||
@SuppressWarnings({"WeakerAccess", "unused", "SameParameterValue"})
|
@SuppressWarnings({"WeakerAccess", "unused", "SameParameterValue"})
|
||||||
public class Helpers extends io.github.gsantner.opoc.util.Helpers {
|
public class ContextUtils extends net.gsantner.opoc.util.ContextUtils {
|
||||||
protected Helpers(Context context) {
|
protected ContextUtils(Context context) {
|
||||||
super(context);
|
super(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public static Helpers get() {
|
public static ContextUtils get() {
|
||||||
return new Helpers(App.get());
|
return new ContextUtils(App.get());
|
||||||
}
|
}
|
||||||
|
|
||||||
public File createImageFile() throws IOException {
|
public File createImageFile() throws IOException {
|
||||||
// Create an image file name
|
// Create an image file name
|
||||||
String timeStamp = new SimpleDateFormat("dd-MM-yy_HH-mm", Locale.getDefault()).format(new Date());
|
String timeStamp = new SimpleDateFormat("dd-MM-yy_HH-mm", Locale.getDefault()).format(new Date());
|
||||||
String imageFileName = "JPEG_" + timeStamp + "_";
|
String imageFileName = "JPEG_" + timeStamp + "_";
|
||||||
AppLog.d(Helpers.class, Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).getAbsolutePath());
|
AppLog.d(ContextUtils.class, Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).getAbsolutePath());
|
||||||
File storageDir = Environment.getExternalStoragePublicDirectory(
|
File storageDir = Environment.getExternalStoragePublicDirectory(
|
||||||
Environment.DIRECTORY_PICTURES);
|
Environment.DIRECTORY_PICTURES);
|
||||||
return new File(
|
return new File(
|
|
@ -32,7 +32,7 @@ import com.github.dfa.diaspora_android.activity.MainActivity;
|
||||||
import com.github.dfa.diaspora_android.data.DiasporaPodList;
|
import com.github.dfa.diaspora_android.data.DiasporaPodList;
|
||||||
import com.github.dfa.diaspora_android.util.AppSettings;
|
import com.github.dfa.diaspora_android.util.AppSettings;
|
||||||
|
|
||||||
import io.github.gsantner.opoc.util.AdBlock;
|
import net.gsantner.opoc.util.AdBlock;
|
||||||
|
|
||||||
public class CustomWebViewClient extends WebViewClient {
|
public class CustomWebViewClient extends WebViewClient {
|
||||||
private final App app;
|
private final App app;
|
||||||
|
|
149
app/src/main/java/net/gsantner/opoc/ui/LanguagePreference.java
Normal file
149
app/src/main/java/net/gsantner/opoc/ui/LanguagePreference.java
Normal file
|
@ -0,0 +1,149 @@
|
||||||
|
/*
|
||||||
|
* ------------------------------------------------------------------------------
|
||||||
|
* Gregor Santner <gsantner.github.io> wrote this. You can do whatever you want
|
||||||
|
* with it. If we meet some day, and you think it is worth it, you can buy me a
|
||||||
|
* coke in return. Provided as is without any kind of warranty. Do not blame or
|
||||||
|
* sue me if something goes wrong. No attribution required. - Gregor Santner
|
||||||
|
*
|
||||||
|
* License: Creative Commons Zero (CC0 1.0)
|
||||||
|
* http://creativecommons.org/publicdomain/zero/1.0/
|
||||||
|
* ----------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* A ListPreference that displays a list of available languages
|
||||||
|
* Requires:
|
||||||
|
* The BuildConfig field "APPLICATION_LANGUAGES" which is a array of all available languages
|
||||||
|
* opoc/ContextUtils
|
||||||
|
* BuildConfig field can be defined by using the method below
|
||||||
|
|
||||||
|
buildConfigField("String[]", "APPLICATION_LANGUAGES", '{' + getUsedAndroidLanguages().collect {"\"${it}\""}.join(",") + '}')
|
||||||
|
|
||||||
|
@SuppressWarnings(["UnnecessaryQualifiedReference", "SpellCheckingInspection"])
|
||||||
|
static String[] getUsedAndroidLanguages() {
|
||||||
|
Set<String> langs = new HashSet<>()
|
||||||
|
new File('.').eachFileRecurse(groovy.io.FileType.DIRECTORIES) {
|
||||||
|
final foldername = it.name
|
||||||
|
if (foldername.startsWith('values-') && !it.canonicalPath.contains("build" + File.separator + "intermediates")) {
|
||||||
|
new File(it.toString()).eachFileRecurse(groovy.io.FileType.FILES) {
|
||||||
|
if (it.name.toLowerCase().endsWith(".xml") && it.getCanonicalFile().getText('UTF-8').contains("<string")) {
|
||||||
|
langs.add(foldername.replace("values-", ""))
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return langs.toArray(new String[langs.size()])
|
||||||
|
}
|
||||||
|
|
||||||
|
* Summary: Change language of this app. Restart app for changes to take effect
|
||||||
|
|
||||||
|
* Define element in Preferences-XML:
|
||||||
|
<!--suppress AndroidDomInspection -->
|
||||||
|
<net.gsantner.opoc.ui.LanguagePreference
|
||||||
|
android:icon="@drawable/ic_language_black_24dp"
|
||||||
|
android:defaultValue=""
|
||||||
|
android:key="@string/pref_key__language"
|
||||||
|
android:summary="@string/pref_desc__language"
|
||||||
|
android:title="@string/pref_title__language"/>
|
||||||
|
*/
|
||||||
|
package net.gsantner.opoc.ui;
|
||||||
|
|
||||||
|
import android.annotation.TargetApi;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.os.Build;
|
||||||
|
import android.preference.ListPreference;
|
||||||
|
import android.util.AttributeSet;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Locale;
|
||||||
|
|
||||||
|
import net.gsantner.opoc.util.ContextUtils;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A {@link android.preference.ListPreference} that displays a list of languages to select from
|
||||||
|
*/
|
||||||
|
@SuppressWarnings({"unused", "SpellCheckingInspection"})
|
||||||
|
public class LanguagePreference extends ListPreference {
|
||||||
|
public LanguagePreference(Context context) {
|
||||||
|
super(context);
|
||||||
|
init(context, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public LanguagePreference(Context context, AttributeSet attrs) {
|
||||||
|
super(context, attrs);
|
||||||
|
init(context, attrs);
|
||||||
|
}
|
||||||
|
|
||||||
|
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
|
||||||
|
public LanguagePreference(Context context, AttributeSet attrs, int defStyleAttr) {
|
||||||
|
super(context, attrs, defStyleAttr);
|
||||||
|
init(context, attrs);
|
||||||
|
}
|
||||||
|
|
||||||
|
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
|
||||||
|
public LanguagePreference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
|
||||||
|
super(context, attrs, defStyleAttr, defStyleRes);
|
||||||
|
init(context, attrs);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean callChangeListener(Object newValue) {
|
||||||
|
if (newValue instanceof String) {
|
||||||
|
// Does not apply to existing UI, use recreate()
|
||||||
|
new ContextUtils(getContext()).setAppLanguage((String) newValue);
|
||||||
|
}
|
||||||
|
return super.callChangeListener(newValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void init(Context context, AttributeSet attrs) {
|
||||||
|
// Fetch readable details
|
||||||
|
ContextUtils ContextUtils = new ContextUtils(context);
|
||||||
|
List<String> languages = new ArrayList<>();
|
||||||
|
Object bcof = ContextUtils.getBuildConfigValue("APPLICATION_LANGUAGES");
|
||||||
|
if (bcof instanceof String[]) {
|
||||||
|
for (String langId : (String[]) bcof) {
|
||||||
|
Locale locale = ContextUtils.getLocaleByAndroidCode(langId);
|
||||||
|
languages.add(summarizeLocale(locale) + ";" + langId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Sort languages naturally
|
||||||
|
Collections.sort(languages);
|
||||||
|
|
||||||
|
// Show in UI
|
||||||
|
String[] entries = new String[languages.size() + 2];
|
||||||
|
String[] entryval = new String[languages.size() + 2];
|
||||||
|
for (int i = 0; i < languages.size(); i++) {
|
||||||
|
entries[i + 2] = languages.get(i).split(";")[0];
|
||||||
|
entryval[i + 2] = languages.get(i).split(";")[1];
|
||||||
|
}
|
||||||
|
entries[0] = "System";
|
||||||
|
entryval[0] = "";
|
||||||
|
entries[1] = "English";
|
||||||
|
entryval[1] = "en";
|
||||||
|
|
||||||
|
setEntries(entries);
|
||||||
|
setEntryValues(entryval);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Concat english and localized language name
|
||||||
|
// Append country if country specific (e.g. Portuguese Brazil)
|
||||||
|
private String summarizeLocale(Locale locale) {
|
||||||
|
String country = locale.getDisplayCountry(locale);
|
||||||
|
String language = locale.getDisplayLanguage(locale);
|
||||||
|
return locale.getDisplayLanguage(Locale.ENGLISH)
|
||||||
|
+ " (" + language.substring(0, 1).toUpperCase() + language.substring(1)
|
||||||
|
+ ((!country.isEmpty() && !country.toLowerCase().equals(language.toLowerCase())) ? (", " + country) : "")
|
||||||
|
+ ")";
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add current language to summary
|
||||||
|
@Override
|
||||||
|
public CharSequence getSummary() {
|
||||||
|
Locale locale = new ContextUtils(getContext()).getLocaleByAndroidCode(getValue());
|
||||||
|
return super.getSummary() + "\n\n" + summarizeLocale(locale);
|
||||||
|
}
|
||||||
|
}
|
|
@ -9,7 +9,7 @@
|
||||||
* http://creativecommons.org/publicdomain/zero/1.0/
|
* http://creativecommons.org/publicdomain/zero/1.0/
|
||||||
* ----------------------------------------------------------------------------
|
* ----------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
package io.github.gsantner.opoc.util;
|
package net.gsantner.opoc.util;
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.content.DialogInterface;
|
import android.content.DialogInterface;
|
||||||
|
@ -22,17 +22,18 @@ import android.text.Html;
|
||||||
import android.text.SpannableString;
|
import android.text.SpannableString;
|
||||||
import android.text.method.LinkMovementMethod;
|
import android.text.method.LinkMovementMethod;
|
||||||
import android.util.TypedValue;
|
import android.util.TypedValue;
|
||||||
|
import android.view.WindowManager;
|
||||||
import android.view.inputmethod.InputMethodManager;
|
import android.view.inputmethod.InputMethodManager;
|
||||||
|
|
||||||
|
|
||||||
@SuppressWarnings({"WeakerAccess", "unused", "SameParameterValue", "SpellCheckingInspection"})
|
@SuppressWarnings({"WeakerAccess", "unused", "SameParameterValue", "SpellCheckingInspection"})
|
||||||
public class HelpersA extends Helpers {
|
public class ActivityUtils extends net.gsantner.opoc.util.ContextUtils {
|
||||||
//########################
|
//########################
|
||||||
//## Members, Constructors
|
//## Members, Constructors
|
||||||
//########################
|
//########################
|
||||||
protected Activity _activity;
|
protected Activity _activity;
|
||||||
|
|
||||||
public HelpersA(final Activity activity) {
|
public ActivityUtils(final Activity activity) {
|
||||||
super(activity);
|
super(activity);
|
||||||
_activity = activity;
|
_activity = activity;
|
||||||
}
|
}
|
||||||
|
@ -106,4 +107,18 @@ public class HelpersA extends Helpers {
|
||||||
.setView(textView);
|
.setView(textView);
|
||||||
dialog.show();
|
dialog.show();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Toggle with no param, else set visibility according to first bool
|
||||||
|
public void toggleStatusbarVisibility(boolean... optionalForceVisible) {
|
||||||
|
WindowManager.LayoutParams attrs = _activity.getWindow().getAttributes();
|
||||||
|
int flag = WindowManager.LayoutParams.FLAG_FULLSCREEN;
|
||||||
|
if (optionalForceVisible.length == 0) {
|
||||||
|
attrs.flags ^= flag;
|
||||||
|
} else if (optionalForceVisible.length == 1 && optionalForceVisible[0]) {
|
||||||
|
attrs.flags &= ~flag;
|
||||||
|
} else {
|
||||||
|
attrs.flags |= flag;
|
||||||
|
}
|
||||||
|
_activity.getWindow().setAttributes(attrs);
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -24,7 +24,7 @@ public WebResourceResponse shouldInterceptRequest(WebView view, String url) {
|
||||||
: super.shouldInterceptRequest(view, url);
|
: super.shouldInterceptRequest(view, url);
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
package io.github.gsantner.opoc.util;
|
package net.gsantner.opoc.util;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
@ -47,7 +47,7 @@ import java.util.Set;
|
||||||
/**
|
/**
|
||||||
* Simple Host-Based AdBlocker
|
* Simple Host-Based AdBlocker
|
||||||
*/
|
*/
|
||||||
@SuppressWarnings({"WeakerAccess", "SpellCheckingInspection"})
|
@SuppressWarnings({"WeakerAccess", "SpellCheckingInspection", "unused"})
|
||||||
public class AdBlock {
|
public class AdBlock {
|
||||||
private static final AdBlock instance = new AdBlock();
|
private static final AdBlock instance = new AdBlock();
|
||||||
|
|
||||||
|
@ -60,9 +60,9 @@ public class AdBlock {
|
||||||
//## Members
|
//## Members
|
||||||
//##
|
//##
|
||||||
//########################
|
//########################
|
||||||
private final Set<String> adblockHostsFromRaw = new HashSet<>();
|
private final Set<String> _adblockHostsFromRaw = new HashSet<>();
|
||||||
private final Set<String> adblockHosts = new HashSet<>();
|
private final Set<String> _adblockHosts = new HashSet<>();
|
||||||
private boolean isLoaded;
|
private boolean _isLoaded;
|
||||||
|
|
||||||
//########################
|
//########################
|
||||||
//##
|
//##
|
||||||
|
@ -80,7 +80,7 @@ public class AdBlock {
|
||||||
if (host.startsWith("www.") && host.length() >= 4) {
|
if (host.startsWith("www.") && host.length() >= 4) {
|
||||||
host = host.substring(4);
|
host = host.substring(4);
|
||||||
}
|
}
|
||||||
return adblockHosts.contains(host) || adblockHosts.contains("www." + host);
|
return _adblockHosts.contains(host) || _adblockHosts.contains("www." + host);
|
||||||
} catch (URISyntaxException e) {
|
} catch (URISyntaxException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
@ -90,11 +90,15 @@ public class AdBlock {
|
||||||
}
|
}
|
||||||
|
|
||||||
public AdBlock reset() {
|
public AdBlock reset() {
|
||||||
adblockHosts.clear();
|
_adblockHosts.clear();
|
||||||
adblockHosts.addAll(adblockHostsFromRaw);
|
_adblockHosts.addAll(_adblockHostsFromRaw);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isLoaded() {
|
||||||
|
return _isLoaded;
|
||||||
|
}
|
||||||
|
|
||||||
public static WebResourceResponse createEmptyResponse() {
|
public static WebResourceResponse createEmptyResponse() {
|
||||||
return new WebResourceResponse("text/plain", "utf-8", new ByteArrayInputStream("".getBytes()));
|
return new WebResourceResponse("text/plain", "utf-8", new ByteArrayInputStream("".getBytes()));
|
||||||
}
|
}
|
||||||
|
@ -107,7 +111,7 @@ public class AdBlock {
|
||||||
host = host.substring(4);
|
host = host.substring(4);
|
||||||
}
|
}
|
||||||
if (!host.startsWith("#") && !host.startsWith("\"")) {
|
if (!host.startsWith("#") && !host.startsWith("\"")) {
|
||||||
adblockHosts.add(host);
|
_adblockHosts.add(host);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -120,7 +124,7 @@ public class AdBlock {
|
||||||
public void run() {
|
public void run() {
|
||||||
try {
|
try {
|
||||||
loadHostsFromRawAssets(context);
|
loadHostsFromRawAssets(context);
|
||||||
isLoaded = true;
|
_isLoaded = true;
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
@ -132,7 +136,7 @@ public class AdBlock {
|
||||||
BufferedReader br = null;
|
BufferedReader br = null;
|
||||||
String host;
|
String host;
|
||||||
|
|
||||||
adblockHosts.clear();
|
_adblockHosts.clear();
|
||||||
for (int rawId : getAdblockIdsInRaw()) {
|
for (int rawId : getAdblockIdsInRaw()) {
|
||||||
try {
|
try {
|
||||||
br = new BufferedReader(new InputStreamReader(context.getResources().openRawResource(rawId)));
|
br = new BufferedReader(new InputStreamReader(context.getResources().openRawResource(rawId)));
|
||||||
|
@ -150,8 +154,8 @@ public class AdBlock {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
adblockHostsFromRaw.clear();
|
_adblockHostsFromRaw.clear();
|
||||||
adblockHostsFromRaw.addAll(adblockHosts);
|
_adblockHostsFromRaw.addAll(_adblockHosts);
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<Integer> getAdblockIdsInRaw() {
|
private List<Integer> getAdblockIdsInRaw() {
|
|
@ -11,8 +11,6 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Get updates:
|
|
||||||
* https://github.com/gsantner/onePieceOfCode/blob/master/java/AppSettingsBase.java
|
|
||||||
* This is a wrapper for settings based on SharedPreferences
|
* This is a wrapper for settings based on SharedPreferences
|
||||||
* with keys in resources. Extend from this class and add
|
* with keys in resources. Extend from this class and add
|
||||||
* getters/setters for the app's settings.
|
* getters/setters for the app's settings.
|
||||||
|
@ -44,7 +42,7 @@
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package io.github.gsantner.opoc.util;
|
package net.gsantner.opoc.util;
|
||||||
|
|
||||||
import android.annotation.SuppressLint;
|
import android.annotation.SuppressLint;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
@ -73,9 +71,9 @@ public class AppSettingsBase {
|
||||||
//########################
|
//########################
|
||||||
//## Members, Constructors
|
//## Members, Constructors
|
||||||
//########################
|
//########################
|
||||||
protected final Context _context;
|
|
||||||
protected final SharedPreferences _prefApp;
|
protected final SharedPreferences _prefApp;
|
||||||
protected final String _prefAppName;
|
protected final String _prefAppName;
|
||||||
|
protected final Context _context;
|
||||||
|
|
||||||
public AppSettingsBase(final Context context) {
|
public AppSettingsBase(final Context context) {
|
||||||
this(context, SHARED_PREF_APP);
|
this(context, SHARED_PREF_APP);
|
|
@ -9,7 +9,7 @@
|
||||||
* http://creativecommons.org/publicdomain/zero/1.0/
|
* http://creativecommons.org/publicdomain/zero/1.0/
|
||||||
* ----------------------------------------------------------------------------
|
* ----------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
package io.github.gsantner.opoc.util;
|
package net.gsantner.opoc.util;
|
||||||
|
|
||||||
import android.annotation.SuppressLint;
|
import android.annotation.SuppressLint;
|
||||||
import android.app.AlarmManager;
|
import android.app.AlarmManager;
|
||||||
|
@ -22,16 +22,26 @@ import android.content.pm.PackageManager;
|
||||||
import android.content.res.ColorStateList;
|
import android.content.res.ColorStateList;
|
||||||
import android.content.res.Configuration;
|
import android.content.res.Configuration;
|
||||||
import android.content.res.Resources;
|
import android.content.res.Resources;
|
||||||
|
import android.graphics.Bitmap;
|
||||||
|
import android.graphics.BitmapFactory;
|
||||||
|
import android.graphics.Canvas;
|
||||||
import android.graphics.Color;
|
import android.graphics.Color;
|
||||||
|
import android.graphics.Matrix;
|
||||||
|
import android.graphics.drawable.BitmapDrawable;
|
||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
|
import android.graphics.drawable.VectorDrawable;
|
||||||
import android.net.ConnectivityManager;
|
import android.net.ConnectivityManager;
|
||||||
import android.net.NetworkInfo;
|
import android.net.NetworkInfo;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
|
import android.os.Build;
|
||||||
import android.support.annotation.ColorRes;
|
import android.support.annotation.ColorRes;
|
||||||
import android.support.annotation.DrawableRes;
|
import android.support.annotation.DrawableRes;
|
||||||
|
import android.support.annotation.Nullable;
|
||||||
import android.support.annotation.RawRes;
|
import android.support.annotation.RawRes;
|
||||||
import android.support.annotation.StringRes;
|
import android.support.annotation.StringRes;
|
||||||
|
import android.support.graphics.drawable.VectorDrawableCompat;
|
||||||
import android.support.v4.content.ContextCompat;
|
import android.support.v4.content.ContextCompat;
|
||||||
|
import android.support.v4.graphics.drawable.DrawableCompat;
|
||||||
import android.support.v7.app.AlertDialog;
|
import android.support.v7.app.AlertDialog;
|
||||||
import android.support.v7.widget.AppCompatButton;
|
import android.support.v7.widget.AppCompatButton;
|
||||||
import android.text.Html;
|
import android.text.Html;
|
||||||
|
@ -40,22 +50,31 @@ import android.text.Spanned;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
import android.text.method.LinkMovementMethod;
|
import android.text.method.LinkMovementMethod;
|
||||||
import android.util.DisplayMetrics;
|
import android.util.DisplayMetrics;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.inputmethod.InputMethodManager;
|
||||||
import android.webkit.WebView;
|
import android.webkit.WebView;
|
||||||
|
import android.widget.ImageView;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
import android.widget.Toast;
|
||||||
|
|
||||||
import java.io.BufferedReader;
|
import java.io.BufferedReader;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileNotFoundException;
|
||||||
|
import java.io.FileOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStreamReader;
|
import java.io.InputStreamReader;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
|
||||||
|
import static android.graphics.Bitmap.CompressFormat;
|
||||||
|
|
||||||
@SuppressWarnings({"WeakerAccess", "unused", "SameParameterValue", "SpellCheckingInspection", "deprecation"})
|
@SuppressWarnings({"WeakerAccess", "unused", "SameParameterValue", "SpellCheckingInspection", "deprecation"})
|
||||||
public class Helpers {
|
public class ContextUtils {
|
||||||
//########################
|
//########################
|
||||||
//## Members, Constructors
|
//## Members, Constructors
|
||||||
//########################
|
//########################
|
||||||
protected Context _context;
|
protected Context _context;
|
||||||
|
|
||||||
public Helpers(Context context) {
|
public ContextUtils(Context context) {
|
||||||
_context = context;
|
_context = context;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -231,6 +250,14 @@ public class Helpers {
|
||||||
return activeNetInfo != null && activeNetInfo.isConnectedOrConnecting();
|
return activeNetInfo != null && activeNetInfo.isConnectedOrConnecting();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isConnectedToInternet(@Nullable @StringRes Integer warnMessageStringRes) {
|
||||||
|
final boolean result = isConnectedToInternet();
|
||||||
|
if (!result && warnMessageStringRes != null)
|
||||||
|
Toast.makeText(_context, _context.getString(warnMessageStringRes), Toast.LENGTH_SHORT).show();
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
public void restartApp(Class classToStartupWith) {
|
public void restartApp(Class classToStartupWith) {
|
||||||
Intent restartIntent = new Intent(_context, classToStartupWith);
|
Intent restartIntent = new Intent(_context, classToStartupWith);
|
||||||
PendingIntent restartIntentP = PendingIntent.getActivity(_context, 555,
|
PendingIntent restartIntentP = PendingIntent.getActivity(_context, 555,
|
||||||
|
@ -317,4 +344,94 @@ public class Helpers {
|
||||||
public float dp2px(final float dp) {
|
public float dp2px(final float dp) {
|
||||||
return dp * _context.getResources().getDisplayMetrics().density;
|
return dp * _context.getResources().getDisplayMetrics().density;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setViewVisible(View view, boolean visible) {
|
||||||
|
view.setVisibility(visible ? View.VISIBLE : View.GONE);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void setDrawableWithColorToImageView(ImageView imageView, @DrawableRes int drawableResId, @ColorRes int colorResId) {
|
||||||
|
imageView.setImageResource(drawableResId);
|
||||||
|
imageView.setColorFilter(ContextCompat.getColor(imageView.getContext(), colorResId));
|
||||||
|
}
|
||||||
|
|
||||||
|
public Bitmap drawableToBitmap(Drawable drawable) {
|
||||||
|
Bitmap bitmap = null;
|
||||||
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP && (drawable instanceof VectorDrawable || drawable instanceof VectorDrawableCompat)) {
|
||||||
|
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
|
||||||
|
drawable = (DrawableCompat.wrap(drawable)).mutate();
|
||||||
|
}
|
||||||
|
|
||||||
|
bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(),
|
||||||
|
drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
|
||||||
|
Canvas canvas = new Canvas(bitmap);
|
||||||
|
drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
|
||||||
|
drawable.draw(canvas);
|
||||||
|
} else if (drawable instanceof BitmapDrawable) {
|
||||||
|
bitmap = ((BitmapDrawable) drawable).getBitmap();
|
||||||
|
}
|
||||||
|
return bitmap;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Bitmap loadImageFromFilesystem(String imagePath, int maxDimen) {
|
||||||
|
BitmapFactory.Options options = new BitmapFactory.Options();
|
||||||
|
options.inJustDecodeBounds = true;
|
||||||
|
BitmapFactory.decodeFile(imagePath, options);
|
||||||
|
options.inSampleSize = calculateInSampleSize(options, maxDimen);
|
||||||
|
options.inJustDecodeBounds = false;
|
||||||
|
return BitmapFactory.decodeFile(imagePath, options);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Calculates the scaling factor so the bitmap is maximal as big as the maxDimen
|
||||||
|
*
|
||||||
|
* @param options Bitmap-options that contain the current dimensions of the bitmap
|
||||||
|
* @param maxDimen Max size of the Bitmap (width or height)
|
||||||
|
* @return the scaling factor that needs to be applied to the bitmap
|
||||||
|
*/
|
||||||
|
public int calculateInSampleSize(BitmapFactory.Options options, int maxDimen) {
|
||||||
|
// Raw height and width of image
|
||||||
|
int height = options.outHeight;
|
||||||
|
int width = options.outWidth;
|
||||||
|
int inSampleSize = 1;
|
||||||
|
|
||||||
|
if (Math.max(height, width) > maxDimen) {
|
||||||
|
inSampleSize = Math.round(1f * Math.max(height, width) / maxDimen);
|
||||||
|
}
|
||||||
|
return inSampleSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Bitmap scaleBitmap(Bitmap bitmap, int maxDimen) {
|
||||||
|
int picSize = Math.min(bitmap.getHeight(), bitmap.getWidth());
|
||||||
|
float scale = 1.f * maxDimen / picSize;
|
||||||
|
Matrix matrix = new Matrix();
|
||||||
|
matrix.postScale(scale, scale);
|
||||||
|
return Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
public File writeImageToFileJpeg(String path, String filename, Bitmap image) {
|
||||||
|
return writeImageToFile(path, filename, image, Bitmap.CompressFormat.JPEG, 95);
|
||||||
|
}
|
||||||
|
|
||||||
|
public File writeImageToFile(String path, String filename, Bitmap image, CompressFormat format, int quality) {
|
||||||
|
File imageFile = new File(path);
|
||||||
|
if (imageFile.exists() || imageFile.mkdirs()) {
|
||||||
|
imageFile = new File(path, filename);
|
||||||
|
|
||||||
|
FileOutputStream stream = null;
|
||||||
|
try {
|
||||||
|
stream = new FileOutputStream(imageFile); // overwrites this image every time
|
||||||
|
image.compress(format, quality, stream);
|
||||||
|
return imageFile;
|
||||||
|
} catch (FileNotFoundException ignored) {
|
||||||
|
} finally {
|
||||||
|
try {
|
||||||
|
if (stream != null) {
|
||||||
|
stream.close();
|
||||||
|
}
|
||||||
|
} catch (IOException ignored) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -14,7 +14,7 @@
|
||||||
* Get updates:
|
* Get updates:
|
||||||
* https://github.com/gsantner/onePieceOfCode/blob/master/java/SimpleMarkdownParser.java
|
* https://github.com/gsantner/onePieceOfCode/blob/master/java/SimpleMarkdownParser.java
|
||||||
* Apply to TextView:
|
* Apply to TextView:
|
||||||
* See https://github.com/gsantner/onePieceOfCode/blob/master/android/Helpers.get().java
|
* See https://github.com/gsantner/onePieceOfCode/blob/master/android/ContextUtils.java
|
||||||
* Parses most common markdown tags. Only inline tags are supported, multiline/block syntax
|
* Parses most common markdown tags. Only inline tags are supported, multiline/block syntax
|
||||||
* is not supported (citation, multiline code, ..). This is intended to stay as easy as possible.
|
* is not supported (citation, multiline code, ..). This is intended to stay as easy as possible.
|
||||||
*
|
*
|
||||||
|
@ -27,7 +27,7 @@
|
||||||
* FILTER_WEB is intended to be used at engines understanding most common HTML tags.
|
* FILTER_WEB is intended to be used at engines understanding most common HTML tags.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package io.github.gsantner.opoc.util;
|
package net.gsantner.opoc.util;
|
||||||
|
|
||||||
import java.io.BufferedReader;
|
import java.io.BufferedReader;
|
||||||
import java.io.FileInputStream;
|
import java.io.FileInputStream;
|
||||||
|
@ -130,13 +130,13 @@ public class SimpleMarkdownParser {
|
||||||
//########################
|
//########################
|
||||||
//## Singleton
|
//## Singleton
|
||||||
//########################
|
//########################
|
||||||
private static SimpleMarkdownParser instance;
|
private static SimpleMarkdownParser __instance;
|
||||||
|
|
||||||
public static SimpleMarkdownParser get() {
|
public static SimpleMarkdownParser get() {
|
||||||
if (instance == null) {
|
if (__instance == null) {
|
||||||
instance = new SimpleMarkdownParser();
|
__instance = new SimpleMarkdownParser();
|
||||||
}
|
}
|
||||||
return instance;
|
return __instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
//########################
|
//########################
|
||||||
|
@ -152,8 +152,8 @@ public class SimpleMarkdownParser {
|
||||||
//########################
|
//########################
|
||||||
//## Methods
|
//## Methods
|
||||||
//########################
|
//########################
|
||||||
public SimpleMarkdownParser setDefaultSmpFilter(SmpFilter _defaultSmpFilter) {
|
public SimpleMarkdownParser setDefaultSmpFilter(SmpFilter defaultSmpFilter) {
|
||||||
this._defaultSmpFilter = _defaultSmpFilter;
|
_defaultSmpFilter = defaultSmpFilter;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue