use of android.os.FileUriExposedException in project Notepad by farmerbb.
the class NoteViewFragment method onActivityCreated.
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
// Set values
setRetainInstance(true);
setHasOptionsMenu(true);
// Get filename of saved note
filename = getArguments().getString("filename");
// Change window title
String title;
try {
title = listener.loadNoteTitle(filename);
} catch (IOException e) {
title = getResources().getString(R.string.view_note);
}
getActivity().setTitle(title);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
ActivityManager.TaskDescription taskDescription = new ActivityManager.TaskDescription(title, null, ContextCompat.getColor(getActivity(), R.color.primary));
getActivity().setTaskDescription(taskDescription);
}
// Show the Up button in the action bar.
((AppCompatActivity) getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true);
// Animate elevation change
if (getActivity().findViewById(R.id.layoutMain).getTag().equals("main-layout-large") && Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
LinearLayout noteViewEdit = (LinearLayout) getActivity().findViewById(R.id.noteViewEdit);
LinearLayout noteList = (LinearLayout) getActivity().findViewById(R.id.noteList);
noteList.animate().z(0f);
if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE)
noteViewEdit.animate().z(getResources().getDimensionPixelSize(R.dimen.note_view_edit_elevation_land));
else
noteViewEdit.animate().z(getResources().getDimensionPixelSize(R.dimen.note_view_edit_elevation));
}
// Set up content view
TextView noteContents = (TextView) getActivity().findViewById(R.id.textView);
markdownView = (MarkdownView) getActivity().findViewById(R.id.markdownView);
// Apply theme
SharedPreferences pref = getActivity().getSharedPreferences(getActivity().getPackageName() + "_preferences", Context.MODE_PRIVATE);
ScrollView scrollView = (ScrollView) getActivity().findViewById(R.id.scrollView);
String theme = pref.getString("theme", "light-sans");
int textSize = -1;
int textColor = -1;
String fontFamily = null;
if (theme.contains("light")) {
if (noteContents != null) {
noteContents.setTextColor(ContextCompat.getColor(getActivity(), R.color.text_color_primary));
noteContents.setBackgroundColor(ContextCompat.getColor(getActivity(), R.color.window_background));
}
if (markdownView != null) {
markdownView.setBackgroundColor(ContextCompat.getColor(getActivity(), R.color.window_background));
textColor = ContextCompat.getColor(getActivity(), R.color.text_color_primary);
}
scrollView.setBackgroundColor(ContextCompat.getColor(getActivity(), R.color.window_background));
}
if (theme.contains("dark")) {
if (noteContents != null) {
noteContents.setTextColor(ContextCompat.getColor(getActivity(), R.color.text_color_primary_dark));
noteContents.setBackgroundColor(ContextCompat.getColor(getActivity(), R.color.window_background_dark));
}
if (markdownView != null) {
markdownView.setBackgroundColor(ContextCompat.getColor(getActivity(), R.color.window_background_dark));
textColor = ContextCompat.getColor(getActivity(), R.color.text_color_primary_dark);
}
scrollView.setBackgroundColor(ContextCompat.getColor(getActivity(), R.color.window_background_dark));
}
if (theme.contains("sans")) {
if (noteContents != null)
noteContents.setTypeface(Typeface.SANS_SERIF);
if (markdownView != null)
fontFamily = "sans-serif";
}
if (theme.contains("serif")) {
if (noteContents != null)
noteContents.setTypeface(Typeface.SERIF);
if (markdownView != null)
fontFamily = "serif";
}
if (theme.contains("monospace")) {
if (noteContents != null)
noteContents.setTypeface(Typeface.MONOSPACE);
if (markdownView != null)
fontFamily = "monospace";
}
switch(pref.getString("font_size", "normal")) {
case "smallest":
textSize = 12;
break;
case "small":
textSize = 14;
break;
case "normal":
textSize = 16;
break;
case "large":
textSize = 18;
break;
case "largest":
textSize = 20;
break;
}
if (noteContents != null)
noteContents.setTextSize(textSize);
String css = "";
if (markdownView != null) {
String topBottom = " " + Float.toString(getResources().getDimension(R.dimen.padding_top_bottom) / getResources().getDisplayMetrics().density) + "px";
String leftRight = " " + Float.toString(getResources().getDimension(R.dimen.padding_left_right) / getResources().getDisplayMetrics().density) + "px";
String fontSize = " " + Integer.toString(textSize) + "px";
String fontColor = " #" + StringUtils.remove(Integer.toHexString(textColor), "ff");
String linkColor = " #" + StringUtils.remove(Integer.toHexString(new TextView(getActivity()).getLinkTextColors().getDefaultColor()), "ff");
css = "body { " + "margin:" + topBottom + topBottom + leftRight + leftRight + "; " + "font-family:" + fontFamily + "; " + "font-size:" + fontSize + "; " + "color:" + fontColor + "; " + "}" + "a { " + "color:" + linkColor + "; " + "}";
markdownView.getSettings().setJavaScriptEnabled(false);
markdownView.getSettings().setLoadsImagesAutomatically(false);
markdownView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
if (!request.hasGesture())
return super.shouldOverrideUrlLoading(view, request);
Intent intent = new Intent(Intent.ACTION_VIEW, request.getUrl());
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
try {
startActivity(intent);
} catch (ActivityNotFoundException | FileUriExposedException e) {
/* Gracefully fail */
}
else
try {
startActivity(intent);
} catch (ActivityNotFoundException e) {
/* Gracefully fail */
}
return true;
}
});
}
// Load note contents
try {
contentsOnLoad = listener.loadNote(filename);
} catch (IOException e) {
showToast(R.string.error_loading_note);
// Add NoteListFragment or WelcomeFragment
Fragment fragment;
if (getActivity().findViewById(R.id.layoutMain).getTag().equals("main-layout-normal"))
fragment = new NoteListFragment();
else
fragment = new WelcomeFragment();
getFragmentManager().beginTransaction().replace(R.id.noteViewEdit, fragment, "NoteListFragment").setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN).commit();
}
// Set TextView contents
if (noteContents != null)
noteContents.setText(contentsOnLoad);
if (markdownView != null)
markdownView.loadMarkdown(contentsOnLoad, "data:text/css;base64," + Base64.encodeToString(css.getBytes(), Base64.DEFAULT));
// Show a toast message if this is the user's first time viewing a note
final SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
firstLoad = sharedPref.getInt("first-load", 0);
if (firstLoad == 0) {
// Show dialog with info
DialogFragment firstLoad = new FirstViewDialogFragment();
firstLoad.show(getFragmentManager(), "firstloadfragment");
// Set first-load preference to 1; we don't need to show the dialog anymore
SharedPreferences.Editor editor = sharedPref.edit();
editor.putInt("first-load", 1);
editor.apply();
}
// Detect single and double-taps using GestureDetector
final GestureDetector detector = new GestureDetector(getActivity(), new GestureDetector.OnGestureListener() {
@Override
public boolean onSingleTapUp(MotionEvent e) {
return false;
}
@Override
public void onShowPress(MotionEvent e) {
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
return false;
}
@Override
public void onLongPress(MotionEvent e) {
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
return false;
}
@Override
public boolean onDown(MotionEvent e) {
return false;
}
});
detector.setOnDoubleTapListener(new GestureDetector.OnDoubleTapListener() {
@Override
public boolean onDoubleTap(MotionEvent e) {
if (sharedPref.getBoolean("show_double_tap_message", true)) {
SharedPreferences.Editor editor = sharedPref.edit();
editor.putBoolean("show_double_tap_message", false);
editor.apply();
}
Bundle bundle = new Bundle();
bundle.putString("filename", filename);
Fragment fragment = new NoteEditFragment();
fragment.setArguments(bundle);
getFragmentManager().beginTransaction().replace(R.id.noteViewEdit, fragment, "NoteEditFragment").commit();
return false;
}
@Override
public boolean onDoubleTapEvent(MotionEvent e) {
return false;
}
@Override
public boolean onSingleTapConfirmed(MotionEvent e) {
if (sharedPref.getBoolean("show_double_tap_message", true) && showMessage) {
showToastLong(R.string.double_tap);
showMessage = false;
}
return false;
}
});
if (noteContents != null)
noteContents.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
detector.onTouchEvent(event);
return false;
}
});
if (markdownView != null)
markdownView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
detector.onTouchEvent(event);
return false;
}
});
}
Aggregations