diff --git a/CHANGELOG.md b/CHANGELOG.md
index d260ab3d..7f1cf722 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,6 @@
+### v0.2.9
+- Use opoc/Helpers
+
### v0.2.7 (2017-05-26)
- Small improvements
diff --git a/app/build.gradle b/app/build.gradle
index df988328..8ca7f3f5 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -9,8 +9,8 @@ android {
minSdkVersion 17
targetSdkVersion 24
- versionCode 17
- versionName "0.2.7"
+ versionCode 18
+ versionName "0.2.8"
applicationId "com.github.dfa.diaspora_android"
resValue 'string', 'app_name', "dandelion*"
diff --git a/app/src/main/java/com/github/dfa/diaspora_android/activity/AboutActivity.java b/app/src/main/java/com/github/dfa/diaspora_android/activity/AboutActivity.java
index e58cfae2..e46c73e6 100644
--- a/app/src/main/java/com/github/dfa/diaspora_android/activity/AboutActivity.java
+++ b/app/src/main/java/com/github/dfa/diaspora_android/activity/AboutActivity.java
@@ -212,13 +212,13 @@ public class AboutActivity extends ThemedActivity
public void buttonClicked(View view) {
switch (view.getId()) {
case R.id.fragment_about__contribute_button:
- Helpers.openInExternalBrowser(getContext(), getString(R.string.fragment_about__contribute_link));
+ Helpers.get().openWebpageInExternalBrowser(getString(R.string.fragment_about__contribute_link));
break;
case R.id.fragment_about__translate_button:
- Helpers.openInExternalBrowser(getContext(), getString(R.string.fragment_about__translate_link));
+ Helpers.get().openWebpageInExternalBrowser(getString(R.string.fragment_about__translate_link));
break;
case R.id.fragment_about__feedback_button:
- Helpers.openInExternalBrowser(getContext(), getString(R.string.fragment_About__feedback_link));
+ Helpers.get().openWebpageInExternalBrowser(getString(R.string.fragment_About__feedback_link));
break;
case R.id.fragment_about__spread_the_word_button:
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);
ButterKnife.bind(this, rootView);
final Context context = rootView.getContext();
- accentColor = Helpers.colorToHex(ThemeHelper.getAccentColor());
+ accentColor = Helpers.get().colorToHexString(ThemeHelper.getAccentColor());
maintainers.setTextFormatted(getString(R.string.fragment_license__maintainers_text,
- Helpers.loadMarkdownFromRawForTextView(context, R.raw.maintainers, "")));
+ Helpers.get().loadMarkdownForTextViewFromRaw(R.raw.maintainers, "")));
contributors.setTextFormatted(getString(R.string.fragment_license__contributors_thank_you,
- Helpers.loadMarkdownFromRawForTextView(context, R.raw.contributors, "* ")));
+ Helpers.get().loadMarkdownForTextViewFromRaw(R.raw.contributors, "* ")));
thirdPartyLibs.setTextFormatted(
- Helpers.loadMarkdownFromRawForTextView(context, R.raw.license_third_party, ""));
+ Helpers.get().loadMarkdownForTextViewFromRaw(R.raw.license_third_party, ""));
return rootView;
}
@@ -278,10 +278,10 @@ public class AboutActivity extends ThemedActivity
public void buttonClicked(View v) {
switch (v.getId()) {
case R.id.fragment_license__leafpic_button:
- Helpers.openInExternalBrowser(getContext(), getString(R.string.fragment_licesen__misc_leafpic_link));
+ Helpers.get().openWebpageInExternalBrowser(getString(R.string.fragment_licesen__misc_leafpic_link));
break;
case R.id.fragment_license__license_button:
- Helpers.openInExternalBrowser(getContext(), getString(R.string.fragment_license__license_gpl_link));
+ Helpers.get().openWebpageInExternalBrowser(getString(R.string.fragment_license__license_gpl_link));
break;
}
}
diff --git a/app/src/main/java/com/github/dfa/diaspora_android/activity/AspectListFragment.java b/app/src/main/java/com/github/dfa/diaspora_android/activity/AspectListFragment.java
index e664172f..3ab4c334 100644
--- a/app/src/main/java/com/github/dfa/diaspora_android/activity/AspectListFragment.java
+++ b/app/src/main/java/com/github/dfa/diaspora_android/activity/AspectListFragment.java
@@ -159,7 +159,7 @@ public class AspectListFragment extends ThemedFragment implements OnSomethingCli
final DiasporaAspect aspect = aspectList[position];
holder.title.setText(aspect.name);
if (position % 2 == 1) {
- holder.root.setBackgroundColor(Helpers.getColorFromRessource(c, R.color.alternate_row_color));
+ holder.root.setBackgroundColor(Helpers.get().color(R.color.alternate_row_color));
}
// Favourite (Star) Image
diff --git a/app/src/main/java/com/github/dfa/diaspora_android/activity/DiasporaStreamFragment.java b/app/src/main/java/com/github/dfa/diaspora_android/activity/DiasporaStreamFragment.java
index 124a142b..f01bb835 100644
--- a/app/src/main/java/com/github/dfa/diaspora_android/activity/DiasporaStreamFragment.java
+++ b/app/src/main/java/com/github/dfa/diaspora_android/activity/DiasporaStreamFragment.java
@@ -271,7 +271,7 @@ public class DiasporaStreamFragment extends BrowserFragment {
// Create the File where the photo should go
File photoFile;
try {
- photoFile = Helpers.createImageFile();
+ photoFile = Helpers.get().createImageFile();
takePictureIntent.putExtra("PhotoPath", mCameraPhotoPath);
} catch (IOException ex) {
AppLog.e(this, "ERROR creating temp file: " + ex.toString());
diff --git a/app/src/main/java/com/github/dfa/diaspora_android/activity/MainActivity.java b/app/src/main/java/com/github/dfa/diaspora_android/activity/MainActivity.java
index 06fbd867..1e438d4b 100644
--- a/app/src/main/java/com/github/dfa/diaspora_android/activity/MainActivity.java
+++ b/app/src/main/java/com/github/dfa/diaspora_android/activity/MainActivity.java
@@ -76,8 +76,6 @@ import com.github.dfa.diaspora_android.ui.theme.ThemedAlertDialogBuilder;
import com.github.dfa.diaspora_android.util.AppLog;
import com.github.dfa.diaspora_android.util.AppSettings;
import com.github.dfa.diaspora_android.util.DiasporaUrlHelper;
-import com.github.dfa.diaspora_android.util.Helpers;
-import io.github.gsantner.opoc.util.SimpleMarkdownParser;
import com.github.dfa.diaspora_android.web.BrowserFragment;
import com.github.dfa.diaspora_android.web.ContextMenuWebView;
import com.github.dfa.diaspora_android.web.ProxyHandler;
@@ -89,6 +87,8 @@ import java.io.IOException;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
+import io.github.gsantner.opoc.util.HelpersA;
+import io.github.gsantner.opoc.util.SimpleMarkdownParser;
public class MainActivity extends ThemedActivity
implements NavigationView.OnNavigationItemSelectedListener,
@@ -229,13 +229,13 @@ public class MainActivity extends ThemedActivity
+ smp.parse(getResources().openRawResource(R.raw.license_third_party),
SimpleMarkdownParser.FILTER_ANDROID_TEXTVIEW, "");
html = smp.setHtml(html).removeMultiNewlines().getHtml();
- Helpers.showDialogWithHtmlTextView(this, html, R.string.about_activity__title_about_license);
+ HelpersA.get(this).showDialogWithHtmlTextView(R.string.about_activity__title_about_license, html);
appSettings.isAppCurrentVersionFirstStart();
} else if (appSettings.isAppCurrentVersionFirstStart()) {
SimpleMarkdownParser smp = new SimpleMarkdownParser().parse(
getResources().openRawResource(R.raw.changelog),
SimpleMarkdownParser.FILTER_ANDROID_TEXTVIEW, "");
- Helpers.showDialogWithHtmlTextView(this, smp.getHtml(), R.string.changelog);
+ HelpersA.get(this).showDialogWithHtmlTextView(R.string.changelog, smp.getHtml());
}
} catch (IOException e) {
e.printStackTrace();
diff --git a/app/src/main/java/com/github/dfa/diaspora_android/activity/PodSelectionFragment.java b/app/src/main/java/com/github/dfa/diaspora_android/activity/PodSelectionFragment.java
index c52d807a..c6c5ddb1 100644
--- a/app/src/main/java/com/github/dfa/diaspora_android/activity/PodSelectionFragment.java
+++ b/app/src/main/java/com/github/dfa/diaspora_android/activity/PodSelectionFragment.java
@@ -116,11 +116,11 @@ public class PodSelectionFragment extends ThemedFragment implements SearchView.O
}
});
LocalBroadcastManager.getInstance(getContext()).registerReceiver(podListReceiver, new IntentFilter(FetchPodsService.MESSAGE_PODS_RECEIVED));
- Helpers.showInfoIfUserNotConnectedToInternet(getContext(), listViewPod);
+ Helpers.get().showInfoIfUserNotConnectedToInternet(getActivity(), listViewPod);
}
public void mergePodlistWithRessources(DiasporaPodList podlist) {
- String sPodlist = Helpers.readTextfileFromRawRessource(getContext(), R.raw.podlist, "", "");
+ String sPodlist = Helpers.get().readTextfileFromRawRes(R.raw.podlist, "", "");
try {
JSONObject jPodlist = new JSONObject(sPodlist);
podlist.mergeWithNewerEntries(new DiasporaPodList().fromJson(jPodlist));
@@ -219,7 +219,7 @@ public class PodSelectionFragment extends ThemedFragment implements SearchView.O
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_reload: {
- if (!Helpers.showInfoIfUserNotConnectedToInternet(getContext(), listViewPod)) {
+ if (!Helpers.get().showInfoIfUserNotConnectedToInternet(getActivity(), listViewPod)) {
Intent i = new Intent(getContext(), FetchPodsService.class);
getContext().startService(i);
return true;
diff --git a/app/src/main/java/com/github/dfa/diaspora_android/activity/TagListFragment.java b/app/src/main/java/com/github/dfa/diaspora_android/activity/TagListFragment.java
index 0f943146..1765ebc6 100644
--- a/app/src/main/java/com/github/dfa/diaspora_android/activity/TagListFragment.java
+++ b/app/src/main/java/com/github/dfa/diaspora_android/activity/TagListFragment.java
@@ -158,7 +158,7 @@ public class TagListFragment extends ThemedFragment implements OnSomethingClickL
final String tag = followedTagsList[position];
holder.title.setText(tag);
if (position % 2 == 1) {
- holder.root.setBackgroundColor(Helpers.getColorFromRessource(c, R.color.alternate_row_color));
+ holder.root.setBackgroundColor(Helpers.get().color(R.color.alternate_row_color));
}
// Favourite (Star) Image
diff --git a/app/src/main/java/com/github/dfa/diaspora_android/ui/theme/ThemedActivity.java b/app/src/main/java/com/github/dfa/diaspora_android/ui/theme/ThemedActivity.java
index 17ec6d4f..407a1920 100644
--- a/app/src/main/java/com/github/dfa/diaspora_android/ui/theme/ThemedActivity.java
+++ b/app/src/main/java/com/github/dfa/diaspora_android/ui/theme/ThemedActivity.java
@@ -99,7 +99,7 @@ public abstract class ThemedActivity extends AppCompatActivity {
public void updateLanguage() {
AppSettings appSettings = getAppSettings();
- Locale locale = Helpers.getLocaleByAndroidCode(appSettings.getLanguage());
+ Locale locale = Helpers.get().getLocaleByAndroidCode(appSettings.getLanguage());
Configuration config = appSettings.getContext().getResources().getConfiguration();
config.locale = locale != null ? locale : Locale.getDefault();
appSettings.getContext().getResources().updateConfiguration(config, null);
diff --git a/app/src/main/java/com/github/dfa/diaspora_android/ui/theme/ThemedColorPickerPreference.java b/app/src/main/java/com/github/dfa/diaspora_android/ui/theme/ThemedColorPickerPreference.java
index 7504a296..544e8d9c 100644
--- a/app/src/main/java/com/github/dfa/diaspora_android/ui/theme/ThemedColorPickerPreference.java
+++ b/app/src/main/java/com/github/dfa/diaspora_android/ui/theme/ThemedColorPickerPreference.java
@@ -50,7 +50,7 @@ public class ThemedColorPickerPreference extends Preference implements Themeable
AppSettings appSettings = AppSettings.get();
String key = getKey();
- int color = Helpers.getColorFromRessource(c, R.color.primary);
+ int color = Helpers.get().color(R.color.primary);
if ((appSettings.isKeyEqual(key, R.string.pref_key__primary_color_shade))) {
color = appSettings.getPrimaryColor();
} else if ((appSettings.isKeyEqual(key, R.string.pref_key__accent_color_shade))) {
diff --git a/app/src/main/java/com/github/dfa/diaspora_android/util/Helpers.java b/app/src/main/java/com/github/dfa/diaspora_android/util/Helpers.java
index 4a93b625..e98befde 100644
--- a/app/src/main/java/com/github/dfa/diaspora_android/util/Helpers.java
+++ b/app/src/main/java/com/github/dfa/diaspora_android/util/Helpers.java
@@ -1,70 +1,36 @@
-/*
- This file is part of the dandelion*.
-
- dandelion* is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- dandelion* is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with the dandelion*.
-
- If not, see .
- */
package com.github.dfa.diaspora_android.util;
+import android.app.Activity;
import android.content.Context;
-import android.content.Intent;
-import android.content.res.Resources;
-import android.net.Uri;
-import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
-import android.support.annotation.RawRes;
-import android.support.annotation.StringRes;
-import android.support.design.widget.Snackbar;
-import android.support.v4.content.ContextCompat;
-import android.support.v7.app.AlertDialog;
-import android.text.Html;
-import android.text.SpannableString;
-import android.text.TextUtils;
-import android.text.method.LinkMovementMethod;
-import android.util.TypedValue;
import android.view.View;
-import android.widget.LinearLayout;
-import android.widget.ScrollView;
-import android.widget.TextView;
+import com.github.dfa.diaspora_android.App;
import com.github.dfa.diaspora_android.R;
import com.github.dfa.diaspora_android.web.WebHelper;
-import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
-import java.io.InputStreamReader;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
import java.util.Locale;
-import io.github.gsantner.opoc.util.SimpleMarkdownParser;
+import io.github.gsantner.opoc.util.HelpersA;
-public class Helpers {
- public static int getColorFromRessource(Context context, int ressourceId) {
- Resources res = context.getResources();
- if (Build.VERSION.SDK_INT >= 23) {
- return res.getColor(ressourceId, context.getTheme());
- } else {
- return res.getColor(ressourceId);
- }
+@SuppressWarnings({"WeakerAccess", "unused", "SameParameterValue"})
+public class Helpers extends io.github.gsantner.opoc.util.Helpers {
+ protected Helpers(Context context) {
+ super(context);
}
- public static File createImageFile() throws IOException {
+
+ public static Helpers get() {
+ return new Helpers(App.get());
+ }
+
+ public File createImageFile() throws IOException {
// Create an image file name
String timeStamp = new SimpleDateFormat("dd-MM-yy_HH-mm", Locale.getDefault()).format(new Date());
String imageFileName = "JPEG_" + timeStamp + "_";
@@ -78,125 +44,35 @@ public class Helpers {
);
}
- public static Locale getLocaleByAndroidCode(String code) {
- if (!TextUtils.isEmpty(code)) {
- return code.contains("-r")
- ? new Locale(code.substring(0, 2), code.substring(4, 6)) // de-rAT
- : new Locale(code); // de
+ /**
+ * Show Information if user is offline, returns true if is not connected to internet
+ *
+ * @param activity Activity
+ * @param anchor A view anchor
+ */
+ public boolean showInfoIfUserNotConnectedToInternet(Activity activity, View anchor) {
+ boolean isOnline = WebHelper.isOnline(context);
+ if (!isOnline) {
+ HelpersA.get(activity).showSnackBar(R.string.no_internet, true);
}
- return Locale.getDefault();
+ return !isOnline;
}
-
- public static String readTextfileFromRawRessource(Context context, int rawRessourceId, String linePrefix, String linePostfix) {
- StringBuilder sb = new StringBuilder();
- String line;
- BufferedReader br = null;
- linePrefix = linePrefix == null ? "" : linePrefix;
- linePostfix = linePostfix == null ? "" : linePostfix;
-
- try {
- br = new BufferedReader(new InputStreamReader(context.getResources().openRawResource(rawRessourceId)));
- while ((line = br.readLine()) != null) {
- sb.append(linePrefix);
- sb.append(line);
- sb.append(linePostfix);
- sb.append("\n");
- }
- } catch (Exception ignored) {
- } finally {
- if (br != null) {
- try {
- br.close();
- } catch (IOException ignored) {
- }
- }
- }
- return sb.toString();
- }
-
- public static String loadMarkdownFromRawForTextView(Context context, @RawRes int rawMdFile, String prepend) {
- try {
- return new SimpleMarkdownParser()
- .parse(context.getResources().openRawResource(rawMdFile),
- SimpleMarkdownParser.FILTER_ANDROID_TEXTVIEW, prepend)
- .replaceColor("#000001", ContextCompat.getColor(context, R.color.accent))
- .removeMultiNewlines().replaceBulletCharacter("*").getHtml();
- } catch (IOException e) {
- e.printStackTrace();
- return "";
- }
- }
-
-
- public static void showDialogWithHtmlTextView(Context context, String html, @StringRes int resTitleId) {
- LinearLayout layout = new LinearLayout(context);
- TextView textView = new TextView(context);
- textView.setMovementMethod(LinkMovementMethod.getInstance());
- ScrollView root = new ScrollView(context);
- int margin = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 20,
- context.getResources().getDisplayMetrics());
- LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
- LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT);
- layoutParams.setMargins(margin, 0, margin, 0);
- layout.setLayoutParams(layoutParams);
-
- layout.addView(textView);
- root.addView(layout);
-
- textView.setText(new SpannableString(Html.fromHtml(html)));
- AlertDialog.Builder dialog = new AlertDialog.Builder(context)
- .setPositiveButton(android.R.string.ok, null)
- .setTitle(resTitleId)
- .setView(root);
- dialog.show();
- }
-
- public static String colorToHex(int color) {
- return "#" + Integer.toHexString(color & 0x00ffffff);
- }
-
- public static void printBundle(Bundle savedInstanceState, String k) {
+ public void logBundle(Bundle savedInstanceState, String k) {
if (savedInstanceState != null) {
for (String key : savedInstanceState.keySet()) {
- AppLog.d("SAVED", key + " is a key in the bundle " + k);
+ AppLog.d("Bundle", key + " is a key in the bundle " + k);
Object bun = savedInstanceState.get(key);
if (bun != null) {
if (bun instanceof Bundle) {
- printBundle((Bundle) bun, k + "." + key);
+ logBundle((Bundle) bun, k + "." + key);
} else if (bun instanceof byte[]) {
- AppLog.d("SAVED", "Key: " + k + "." + key + ": " + Arrays.toString((byte[]) bun));
+ AppLog.d("Bundle", "Key: " + k + "." + key + ": " + Arrays.toString((byte[]) bun));
} else {
- AppLog.d("SAVED", "Key: " + k + "." + key + ": " + bun.toString());
+ AppLog.d("Bundle", "Key: " + k + "." + key + ": " + bun.toString());
}
}
}
}
}
-
- /**
- * Show Information if user is offline, returns true if is not connected to internet
- *
- * @param context Context
- * @param anchor A view anchor
- */
- public static boolean showInfoIfUserNotConnectedToInternet(Context context, View anchor) {
- boolean isOnline = WebHelper.isOnline(context);
- if (!isOnline) {
- Snackbar.make(anchor, R.string.no_internet, Snackbar.LENGTH_LONG).show();
- }
- return !isOnline;
- }
-
- /**
- * Send an Intent that opens url in any browser
- *
- * @param context context
- * @param url url
- */
- public static void openInExternalBrowser(Context context, String url) {
- Intent openBrowserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
- openBrowserIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- context.startActivity(openBrowserIntent);
- }
}
diff --git a/app/src/main/java/io/github/gsantner/opoc/util/AppSettingsBase.java b/app/src/main/java/io/github/gsantner/opoc/util/AppSettingsBase.java
index 02f703bb..76435609 100644
--- a/app/src/main/java/io/github/gsantner/opoc/util/AppSettingsBase.java
+++ b/app/src/main/java/io/github/gsantner/opoc/util/AppSettingsBase.java
@@ -1,10 +1,12 @@
/*
- * ----------------------------------------------------------------------------
- * "THE COKE-WARE LIBRARY LICENSE" (Revision 255):
+ * ---------------------------------------------------------------------------- *
* Gregor Santner wrote this file. You can do whatever
* you want with this stuff. If we meet some day, and you think this stuff is
* worth it, you can buy me a coke in return. Provided as is without any kind
* of warranty. No attribution required. - Gregor Santner
+ *
+ * License: Creative Commons Zero (CC0 1.0)
+ * http://creativecommons.org/publicdomain/zero/1.0/
* ----------------------------------------------------------------------------
*/
diff --git a/app/src/main/java/io/github/gsantner/opoc/util/Helpers.java b/app/src/main/java/io/github/gsantner/opoc/util/Helpers.java
new file mode 100644
index 00000000..21c12492
--- /dev/null
+++ b/app/src/main/java/io/github/gsantner/opoc/util/Helpers.java
@@ -0,0 +1,221 @@
+/*
+ * ---------------------------------------------------------------------------- *
+ * Gregor Santner wrote this file. You can do whatever
+ * you want with this stuff. If we meet some day, and you think this stuff is
+ * worth it, you can buy me a coke in return. Provided as is without any kind
+ * of warranty. No attribution required. - Gregor Santner
+ *
+ * License: Creative Commons Zero (CC0 1.0)
+ * http://creativecommons.org/publicdomain/zero/1.0/
+ * ----------------------------------------------------------------------------
+ */
+package io.github.gsantner.opoc.util;
+
+import android.annotation.SuppressLint;
+import android.app.AlarmManager;
+import android.app.PendingIntent;
+import android.content.ActivityNotFoundException;
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageManager;
+import android.content.res.ColorStateList;
+import android.content.res.Configuration;
+import android.graphics.drawable.Drawable;
+import android.net.ConnectivityManager;
+import android.net.NetworkInfo;
+import android.net.Uri;
+import android.support.annotation.ColorRes;
+import android.support.annotation.DrawableRes;
+import android.support.annotation.RawRes;
+import android.support.annotation.StringRes;
+import android.support.v4.content.ContextCompat;
+import android.support.v7.app.AlertDialog;
+import android.support.v7.widget.AppCompatButton;
+import android.text.TextUtils;
+import android.util.DisplayMetrics;
+import android.webkit.WebView;
+
+import com.github.dfa.diaspora_android.App;
+import com.github.dfa.diaspora_android.BuildConfig;
+import com.github.dfa.diaspora_android.R;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.util.Locale;
+
+@SuppressWarnings({"WeakerAccess", "unused", "SameParameterValue"})
+public class Helpers {
+ protected Context context;
+
+ protected Helpers(Context context) {
+ this.context = context;
+ }
+
+ public static Helpers get() {
+ return new Helpers(App.get());
+ }
+
+ public String str(@StringRes int strResId) {
+ return context.getString(strResId);
+ }
+
+ public Drawable drawable(@DrawableRes int resId) {
+ return ContextCompat.getDrawable(context, resId);
+ }
+
+ public int color(@ColorRes int resId) {
+ return ContextCompat.getColor(context, resId);
+ }
+
+ public Context context() {
+ return context;
+ }
+
+ public String colorToHexString(int intColor) {
+ return String.format("#%06X", 0xFFFFFF & intColor);
+ }
+
+ public String getAppVersionName() {
+ try {
+ PackageManager manager = context.getPackageManager();
+ PackageInfo info = manager.getPackageInfo(context.getPackageName(), 0);
+ return info.versionName;
+ } catch (PackageManager.NameNotFoundException e) {
+ e.printStackTrace();
+ return "unknown";
+ }
+ }
+
+
+ public void openWebpageInExternalBrowser(String url) {
+ Uri uri = Uri.parse(url);
+ Intent intent = new Intent(Intent.ACTION_VIEW, uri);
+ intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ context.startActivity(intent);
+ }
+
+ public void showDonateBitcoinRequest() {
+ if (!BuildConfig.IS_GPLAY_BUILD) {
+ String btcUri = String.format("bitcoin:%s?amount=%s&label=%s&message=%s",
+ str(R.string.donate__bitcoin_id), str(R.string.donate__bitcoin_amount),
+ str(R.string.donate__bitcoin_message), str(R.string.donate__bitcoin_message));
+ Intent intent = new Intent(Intent.ACTION_VIEW);
+ intent.setData(Uri.parse(btcUri));
+ intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ try {
+ context.startActivity(intent);
+ } catch (ActivityNotFoundException e) {
+ openWebpageInExternalBrowser(str(R.string.donate__bitcoin_url));
+ }
+ }
+ }
+
+ public String readTextfileFromRawRes(@RawRes int rawResId, String linePrefix, String linePostfix) {
+ StringBuilder sb = new StringBuilder();
+ BufferedReader br = null;
+ String line;
+
+ linePrefix = linePrefix == null ? "" : linePrefix;
+ linePostfix = linePostfix == null ? "" : linePostfix;
+
+ try {
+ br = new BufferedReader(new InputStreamReader(context.getResources().openRawResource(rawResId)));
+ while ((line = br.readLine()) != null) {
+ sb.append(linePrefix);
+ sb.append(line);
+ sb.append(linePostfix);
+ sb.append("\n");
+ }
+ } catch (Exception ignored) {
+ } finally {
+ if (br != null) {
+ try {
+ br.close();
+ } catch (IOException ignored) {
+ }
+ }
+ }
+ return sb.toString();
+ }
+
+ public void showDialogWithRawFileInWebView(String fileInRaw, @StringRes int resTitleId) {
+ WebView wv = new WebView(context);
+ wv.loadUrl("file:///android_res/raw/" + fileInRaw);
+ AlertDialog.Builder dialog = new AlertDialog.Builder(context)
+ .setPositiveButton(android.R.string.ok, null)
+ .setTitle(resTitleId)
+ .setView(wv);
+ dialog.show();
+ }
+
+ @SuppressLint("RestrictedApi")
+ public void setTintColorOfButton(AppCompatButton button, @ColorRes int resColor) {
+ button.setSupportBackgroundTintList(ColorStateList.valueOf(
+ color(resColor)
+ ));
+ }
+
+ public boolean isConnectedToInternet() {
+ ConnectivityManager connectivityManager = (ConnectivityManager)
+ context.getSystemService(Context.CONNECTIVITY_SERVICE);
+ NetworkInfo activeNetInfo = connectivityManager.getActiveNetworkInfo();
+ return activeNetInfo != null && activeNetInfo.isConnectedOrConnecting();
+ }
+
+ public void restartApp(Class classToStartupWith) {
+ Intent restartIntent = new Intent(context, classToStartupWith);
+ PendingIntent restartIntentP = PendingIntent.getActivity(context, 555,
+ restartIntent, PendingIntent.FLAG_CANCEL_CURRENT);
+ AlarmManager mgr = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
+ mgr.set(AlarmManager.RTC, System.currentTimeMillis() + 100, restartIntentP);
+ System.exit(0);
+ }
+
+ public String loadMarkdownForTextViewFromRaw(@RawRes int rawMdFile, String prepend) {
+ try {
+ return new SimpleMarkdownParser()
+ .parse(context.getResources().openRawResource(rawMdFile),
+ SimpleMarkdownParser.FILTER_ANDROID_TEXTVIEW, prepend)
+ .replaceColor("#000001", color(R.color.accent))
+ .removeMultiNewlines().replaceBulletCharacter("*").getHtml();
+ } catch (IOException e) {
+ e.printStackTrace();
+ return "";
+ }
+ }
+
+ public double getEstimatedScreenSizeInches() {
+ DisplayMetrics dm = context.getResources().getDisplayMetrics();
+
+ double density = dm.density * 160;
+ double x = Math.pow(dm.widthPixels / density, 2);
+ double y = Math.pow(dm.heightPixels / density, 2);
+ double screenInches = Math.sqrt(x + y) * 1.16; // 1.16 = est. Nav/Statusbar
+ screenInches = screenInches < 4.0 ? 4.0 : screenInches;
+ screenInches = screenInches > 12.0 ? 12.0 : screenInches;
+ return screenInches;
+ }
+
+ public boolean isInPortraitMode() {
+ return context.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT;
+ }
+
+ public Locale getLocaleByAndroidCode(String code) {
+ if (!TextUtils.isEmpty(code)) {
+ return code.contains("-r")
+ ? new Locale(code.substring(0, 2), code.substring(4, 6)) // de-rAt
+ : new Locale(code); // de
+ }
+ return Locale.getDefault();
+ }
+
+ // "en"/"de"/"de-rAt"; Empty string = default locale
+ public void setAppLanguage(String androidLocaleString) {
+ Locale locale = getLocaleByAndroidCode(androidLocaleString);
+ Configuration config = context.getResources().getConfiguration();
+ config.locale = locale != null ? locale : Locale.getDefault();
+ context.getResources().updateConfiguration(config, null);
+ }
+}
diff --git a/app/src/main/java/io/github/gsantner/opoc/util/HelpersA.java b/app/src/main/java/io/github/gsantner/opoc/util/HelpersA.java
new file mode 100644
index 00000000..5989138f
--- /dev/null
+++ b/app/src/main/java/io/github/gsantner/opoc/util/HelpersA.java
@@ -0,0 +1,112 @@
+/*
+ * ---------------------------------------------------------------------------- *
+ * Gregor Santner wrote this file. You can do whatever
+ * you want with this stuff. If we meet some day, and you think this stuff is
+ * worth it, you can buy me a coke in return. Provided as is without any kind
+ * of warranty. No attribution required. - Gregor Santner
+ *
+ * License: Creative Commons Zero (CC0 1.0)
+ * http://creativecommons.org/publicdomain/zero/1.0/
+ * ----------------------------------------------------------------------------
+ */
+package io.github.gsantner.opoc.util;
+
+import android.app.Activity;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.support.annotation.StringRes;
+import android.support.design.widget.Snackbar;
+import android.support.v7.app.AlertDialog;
+import android.support.v7.widget.AppCompatTextView;
+import android.text.Html;
+import android.text.SpannableString;
+import android.text.method.ScrollingMovementMethod;
+import android.util.TypedValue;
+import android.view.inputmethod.InputMethodManager;
+
+import com.github.dfa.diaspora_android.R;
+
+
+@SuppressWarnings({"WeakerAccess", "unused", "SameParameterValue"})
+public class HelpersA extends Helpers {
+ protected Activity activity;
+
+ protected HelpersA(Activity activity) {
+ super(activity);
+ this.activity = activity;
+ }
+
+ public static HelpersA get(Activity activity) {
+ return new HelpersA(activity);
+ }
+
+
+ //########################
+ //## Methods
+ //########################
+
+ /**
+ * Animate to specified Activity
+ *
+ * @param to The class of the activity
+ * @param finishFromActivity true: Finish the current activity
+ * @param requestCode Request code for stating the activity, not waiting for result if null
+ */
+ public void animateToActivity(Class to, Boolean finishFromActivity, Integer requestCode) {
+ animateToActivity(new Intent(activity, to), finishFromActivity, requestCode);
+ }
+
+ /**
+ * Animate to activity specified in intent
+ *
+ * @param intent Intent to open start an activity
+ * @param finishFromActivity true: Finish the current activity
+ * @param requestCode Request code for stating the activity, not waiting for result if null
+ */
+ public void animateToActivity(Intent intent, Boolean finishFromActivity, Integer requestCode) {
+ intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
+ if (requestCode != null) {
+ activity.startActivityForResult(intent, requestCode);
+ } else {
+ activity.startActivity(intent);
+
+ }
+ activity.overridePendingTransition(R.anim.fadein, R.anim.fadeout);
+ if (finishFromActivity != null && finishFromActivity) {
+ activity.finish();
+ }
+ }
+
+
+ public void showSnackBar(@StringRes int stringId, boolean showLong) {
+ Snackbar.make(activity.findViewById(android.R.id.content), stringId,
+ showLong ? Snackbar.LENGTH_LONG : Snackbar.LENGTH_SHORT).show();
+ }
+
+ public void hideSoftKeyboard() {
+ InputMethodManager inputMethodManager = (InputMethodManager) activity.getSystemService(Activity.INPUT_METHOD_SERVICE);
+ if (activity.getCurrentFocus() != null && activity.getCurrentFocus().getWindowToken() != null) {
+ inputMethodManager.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), 0);
+ }
+ }
+
+ public void showDialogWithHtmlTextView(@StringRes int resTitleId, String html) {
+ showDialogWithHtmlTextView(resTitleId, html, null);
+ }
+
+ public void showDialogWithHtmlTextView(@StringRes int resTitleId, String html, DialogInterface.OnDismissListener dismissedListener) {
+ AppCompatTextView textView = new AppCompatTextView(context);
+ int padding = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 16,
+ context.getResources().getDisplayMetrics());
+ textView.setMovementMethod(new ScrollingMovementMethod());
+ textView.setPadding(padding, 0, padding, 0);
+
+ textView.setText(new SpannableString(Html.fromHtml(html)));
+ AlertDialog.Builder dialog = new AlertDialog.Builder(context)
+ .setPositiveButton(android.R.string.ok, null)
+ .setOnDismissListener(dismissedListener)
+ .setTitle(resTitleId)
+ .setView(textView);
+ dialog.show();
+ }
+}
diff --git a/app/src/main/java/io/github/gsantner/opoc/util/SimpleMarkdownParser.java b/app/src/main/java/io/github/gsantner/opoc/util/SimpleMarkdownParser.java
index 62e568be..0cdebcbb 100644
--- a/app/src/main/java/io/github/gsantner/opoc/util/SimpleMarkdownParser.java
+++ b/app/src/main/java/io/github/gsantner/opoc/util/SimpleMarkdownParser.java
@@ -1,16 +1,20 @@
/*
- * ----------------------------------------------------------------------------
- * "THE COKE-WARE LIBRARY LICENSE" (Revision 255):
+ * ---------------------------------------------------------------------------- *
* Gregor Santner wrote this file. You can do whatever
* you want with this stuff. If we meet some day, and you think this stuff is
* worth it, you can buy me a coke in return. Provided as is without any kind
* of warranty. No attribution required. - Gregor Santner
+ *
+ * License: Creative Commons Zero (CC0 1.0)
+ * http://creativecommons.org/publicdomain/zero/1.0/
* ----------------------------------------------------------------------------
*/
/*
* Get updates:
* https://github.com/gsantner/onePieceOfCode/blob/master/java/SimpleMarkdownParser.java
+ * Apply to TextView:
+ * See https://github.com/gsantner/onePieceOfCode/blob/master/android/Helpers.get().java
* 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.
*
@@ -21,54 +25,8 @@
* CHANGELOG.md file without inlcuding a WebView for showing HTML, or other additional UI-libraries.
*
* FILTER_HTMLPART is intended to be used at engines understanding most common HTML tags.
- *
- * You can use this anywhere you want, no backlink/attribution required, but I would appreciate it.
*/
-/*
- // Apply to Android TextView:
- textView.setText(new SpannableString(Html.fromHtml(htmlFromParser)));
-
- // As wrapper method, includes applying accent color
- public static String loadMarkdownFromRawForTextView(Context context, @RawRes int rawMdFile, String prepend) {
- try {
- return new SimpleMarkdownParser()
- .parse(context.getResources().openRawResource(rawMdFile),
- SimpleMarkdownParser.FILTER_ANDROID_TEXTVIEW, prepend)
- .replaceColor("#000001", ContextCompat.getColor(context, R.color.accent))
- .removeMultiNewlines().replaceBulletCharacter("*").getHtml();
- } catch (IOException e) {
- e.printStackTrace();
- return "";
- }
- }
-
- // Show HTML a TextView in a scrollable Dialog
- public static void showDialogWithHtmlTextView(Context context, String html, @StringRes int resTitleId) {
- LinearLayout layout = new LinearLayout(context);
- TextView textView = new TextView(context);
- textView.setMovementMethod(LinkMovementMethod.getInstance());
- ScrollView root = new ScrollView(context);
- int margin = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 20,
- context.getResources().getDisplayMetrics());
- LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
- LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT);
- layoutParams.setMargins(margin, 0, margin, 0);
- layout.setLayoutParams(layoutParams);
-
- layout.addView(textView);
- root.addView(layout);
-
- textView.setText(new SpannableString(Html.fromHtml(html)));
- AlertDialog.Builder dialog = new AlertDialog.Builder(context)
- .setPositiveButton(android.R.string.ok, null)
- .setTitle(resTitleId)
- .setView(root);
- dialog.show();
- }
- */
-
-
package io.github.gsantner.opoc.util;
import java.io.BufferedReader;
@@ -137,9 +95,7 @@ public class SimpleMarkdownParser {
};
//########################
- //##
//## Members
- //##
//########################
private String html;
@@ -193,14 +149,10 @@ public class SimpleMarkdownParser {
}
public SimpleMarkdownParser replaceColor(String hexColor, int newIntColor) {
- html = html.replace(hexColor, colorToHexString(newIntColor));
+ html = html.replace(hexColor, String.format("#%06X", 0xFFFFFF & newIntColor));
return this;
}
- public static String colorToHexString(int intColor) {
- return String.format("#%06X", 0xFFFFFF & intColor);
- }
-
@Override
public String toString() {
return html != null ? html : "";
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index c8ea36bf..7d9dd8b0 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -118,4 +118,10 @@
Pod address
Missing value
Jump to last visited page in stream?
+
+ not_implemented
+ @string/not_implemented
+ @string/not_implemented
+ @string/not_implemented
+ @string/not_implemented