Skip to content

Commit

Permalink
Merge pull request #442 from maks/432-fix-opening-files
Browse files Browse the repository at this point in the history
fix opening files with external apps
  • Loading branch information
maks authored Feb 26, 2019
2 parents 38109e5 + cbd7b57 commit 82c9f02
Show file tree
Hide file tree
Showing 4 changed files with 20 additions and 60 deletions.
2 changes: 1 addition & 1 deletion app/src/main/java/com/manichord/mgit/ViewHelper.kt
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,5 @@ import android.view.inputmethod.InputMethodManager

fun hideKeyboard(context : Context) {
val inputMethodManager = context.getSystemService(Activity.INPUT_METHOD_SERVICE) as InputMethodManager
inputMethodManager.hideSoftInputFromWindow((context as Activity).currentFocus.windowToken, 0)
inputMethodManager.hideSoftInputFromWindow((context as Activity?)?.currentFocus?.windowToken, 0)
}
31 changes: 17 additions & 14 deletions app/src/main/java/me/sheimi/android/utils/FsUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
import android.content.Intent;
import android.content.SharedPreferences;
import android.net.Uri;
import android.support.v4.content.FileProvider;
import android.webkit.MimeTypeMap;

/**
Expand All @@ -25,6 +26,8 @@ public class FsUtils {

public static final SimpleDateFormat TIMESTAMP_FORMATTER = new SimpleDateFormat(
"yyyyMMdd_HHmmss", Locale.getDefault());

public static final String PROVIDER_AUTHORITY = "com.manichord.mgit.fileprovider";
public static final String TEMP_DIR = "temp";
private static final String LOGTAG = FsUtils.class.getSimpleName();

Expand Down Expand Up @@ -116,23 +119,23 @@ public static String getMimeType(File file) {
return getMimeType(Uri.fromFile(file).toString());
}

public static void openFile(File file) {
openFile(file, null);
public static void openFile(SheimiFragmentActivity activity, File file) {
//openFile(file, null);
startActivityToEditFile(activity, file);
}

public static void openFile(File file, String mimeType) {
Intent intent = new Intent();
intent.setAction(android.content.Intent.ACTION_VIEW);
Uri uri = Uri.fromFile(file);
if (mimeType == null) {
mimeType = getMimeType(uri.toString());
private static void startActivityToEditFile(SheimiFragmentActivity activity, File file) {
Uri uri = FileProvider.getUriForFile(activity, PROVIDER_AUTHORITY, file);
String mimeType = FsUtils.getMimeType(uri.toString());
Intent editIntent = new Intent(Intent.ACTION_EDIT);
editIntent.setDataAndType(uri, mimeType);
editIntent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
try {
activity.startActivity(editIntent);
activity.forwardTransition();
} catch (ActivityNotFoundException e) {
activity.showMessageDialog(R.string.dialog_error_title, activity.getString(R.string.error_no_edit_app));
}
intent.setDataAndType(uri, mimeType);
BasicFunctions.getActiveActivity().startActivity(
Intent.createChooser(
intent,
BasicFunctions.getActiveActivity().getString(
R.string.label_choose_app_to_open)));
}

public static void deleteFile(File file) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,8 @@
package me.sheimi.sgit.activities;

import android.content.ActivityNotFoundException;
import android.content.Intent;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.content.FileProvider;
import android.support.v4.view.MenuItemCompat;
import android.support.v4.view.PagerTitleStrip;
import android.support.v4.view.ViewPager;
Expand All @@ -31,7 +26,6 @@ public class ViewFileActivity extends SheimiFragmentActivity {

public static String TAG_FILE_NAME = "file_name";
public static String TAG_MODE = "mode";
public static final String PROVIDER_AUTHORITY = "com.manichord.mgit.fileprovider";
public static short TAG_MODE_NORMAL = 0;
public static short TAG_MODE_SSH_KEY = 1;
private CommitsFragment mCommitsFragment;
Expand Down Expand Up @@ -216,12 +210,7 @@ public boolean onOptionsItemSelected(MenuItem item) {
if (mActivityMode == TAG_MODE_SSH_KEY) {
return true;
}
if (Build.VERSION_CODES.N <= Build.VERSION.SDK_INT) {
chooseEditorAndOpenFileForNAndAbove();
}
else {
chooseEditorAndOpenFileForMAndBelow();
}
FsUtils.openFile(this, mFileFragment.getFile());
break;
case R.id.action_edit:
if (mActivityMode == TAG_MODE_SSH_KEY) {
Expand All @@ -244,38 +233,6 @@ public boolean onOptionsItemSelected(MenuItem item) {
return super.onOptionsItemSelected(item);
}

private void chooseEditorAndOpenFileForMAndBelow() {
Uri uri = Uri.fromFile(mFileFragment.getFile());
String mimeType = FsUtils.getMimeType(uri.toString());
Intent viewIntent = new Intent(Intent.ACTION_VIEW);
Intent editIntent = new Intent(Intent.ACTION_EDIT);
viewIntent.setDataAndType(uri, mimeType);
editIntent.setDataAndType(uri, mimeType);
try {
Intent chooserIntent = Intent.createChooser(viewIntent,
getString(R.string.label_choose_app_to_edit));
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, new Intent[] { editIntent });
startActivity(chooserIntent);
forwardTransition();
} catch (ActivityNotFoundException e) {
showMessageDialog(R.string.dialog_error_title, getString(R.string.error_no_edit_app));
}
}

private void chooseEditorAndOpenFileForNAndAbove() {
Uri uri = FileProvider.getUriForFile(this, PROVIDER_AUTHORITY, mFileFragment.getFile());
String mimeType = FsUtils.getMimeType(uri.toString());
Intent editIntent = new Intent(Intent.ACTION_EDIT);
editIntent.setDataAndType(uri, mimeType);
editIntent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
try {
startActivity(editIntent);
forwardTransition();
} catch (ActivityNotFoundException e) {
showMessageDialog(R.string.dialog_error_title, getString(R.string.error_no_edit_app));
}
}

public void setLanguage(String lang) {
mFileFragment.setLanguage(lang);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ public void onItemClick(AdapterView<?> adapterView,
return;
}
try {
FsUtils.openFile(file);
FsUtils.openFile(((SheimiFragmentActivity) getActivity()), file);
} catch (ActivityNotFoundException e) {
Timber.e(e);
((SheimiFragmentActivity)getActivity()).showMessageDialog(R.string.dialog_error_title,
Expand Down

0 comments on commit 82c9f02

Please sign in to comment.