Skip to content

Instantly share code, notes, and snippets.

View fmedlin's full-sized avatar

Fred Medlin fmedlin

View GitHub Profile
package com.automattic.simplenote;
import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.text.Html;
import android.text.method.LinkMovementMethod;
private void handleViewClicks(View view) {
ClickHandler.handleClick(view.findViewById(R.id.about_blog), v ->
browseOrToastOnError(view.getContext(), SIMPLENOTE_BLOG_URL));
ClickHandler.handleClick(view.findViewById(R.id.about_help), v ->
browseOrToastOnError(view.getContext(), SIMPLENOTE_HELP_URL));
ClickHandler.handleClick(view.findViewById(R.id.about_contribute), v ->
browseOrToastOnError(view.getContext(), URL_CONTRIBUTE));
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_about, container, false);
return setupViews(view);
}
private View setupViews(View view) {
setVersionAndCopyrightText(view);
handleViewClicks(view);
ClickHandler.handleClick(
view.findViewById(R.id.about_privacy),
Html.fromHtml(String.format(
getResources().getString(R.string.link_privacy),
"<u><span style=\"color:#",
colorLink,
"\">",
"</span></u>")),
v -> browseOrToastOnError(view.getContext(), URL_PRIVACY)
);
interface ClickHandler {
static void handleClick(@NonNull View view, View.OnClickListener listener) {
view.setOnClickListener(listener);
}
static void handleClick(@NonNull TextView view, CharSequence text, View.OnClickListener listener) {
view.setText(text);
view.setOnClickListener(listener);
}
}
ClickHandler.handleClick(view.findViewById(R.id.about_blog), v ->
browseOrToastOnError(view.getContext(), SIMPLENOTE_BLOG_URL));
private void browseOrToastOnError(Context context, String url) {
browseOrToastOnError(context, url, R.string.no_browser_available);
}
private void browseOrToastOnError(Context context, String url, @StringRes int stringRes) {
try {
BrowserUtils.launchBrowserOrShowError(requireContext(), url);
ClickHandler.handleClick(view.findViewById(R.id.about_blog), v -> {
try {
BrowserUtils.launchBrowserOrShowError(requireContext(), SIMPLENOTE_BLOG_URL);
} catch (Exception e) {
Toast.makeText(getActivity(), R.string.no_browser_available, Toast.LENGTH_LONG).show();
}
});
interface ClickHandler {
static void handleClick(@NonNull View view, View.OnClickListener listener) {
view.setOnClickListener(listener);
}
}
@Override
public void track(AnalyticsTracker.Stat stat, String category, String label, Map<String, ?> properties) {
if (mNosaraClient == null) {
return;
}
String eventName = stat.name().toLowerCase();
final String user;
final TracksClient.NosaraUserType userType;
@fmedlin
fmedlin / mission_vision_values.md
Created October 26, 2021 14:23
Mission and vision statements

Mission

  • Why does this org exist?
  • Why not shut down, cash out and sell off assets?
  • Start with the end in mind

Attributes

  • States the purpose of the org's existence
  • Narrow focus
  • Clear and to the point
  • Realistic, feasible and achievable