6
6
7
7
import java .util .ArrayList ;
8
8
import java .util .List ;
9
+ import java .util .regex .Pattern ;
9
10
import android .util .Log ;
10
11
11
12
import android .app .Activity ;
@@ -95,8 +96,7 @@ Uri getUriForActionViewIntent(String path) {
95
96
}
96
97
else {
97
98
//New versions of Android want files to be shared through a content:// Uri and not via a file:// Uri
98
- //First we convert backslashes to slashes (windows vs. linux path convention) and then try to idenitfy the uri corresponding to the path in the bibtex file
99
- path = convertToLinuxPath (path );
99
+ //First we convert backslashes to slashes and remove Windows style drive letters and then try to idenitfy the uri corresponding to the path in the bibtex file
100
100
Uri uri = getUriInLibraryFolder (path );
101
101
if (uri != null )
102
102
{
@@ -115,9 +115,6 @@ Uri getUriForActionViewIntent(String path) {
115
115
return uri ;
116
116
}
117
117
}
118
- String convertToLinuxPath (String path ) {
119
- return path .replace ("\\ " ,"/" );
120
- }
121
118
@ Override
122
119
String getModifiedPath (String path ) {
123
120
if (android .os .Build .VERSION .SDK_INT < 21 )
@@ -579,7 +576,7 @@ protected void onPreExecute() {
579
576
}
580
577
@ Override
581
578
protected Boolean doInBackground (String ... path0 ) {
582
- String path = path0 [0 ];
579
+ String path = convertToLinuxLikePath ( path0 [0 ]) ;
583
580
DocumentFile libraryFolderRootDir = DocumentFile .fromTreeUri (context , treeUri );
584
581
DocumentFile currentDir = libraryFolderRootDir ;
585
582
DocumentFile file = null ;
@@ -592,7 +589,9 @@ protected Boolean doInBackground(String... path0) {
592
589
{
593
590
//Log.i(getString(R.string.app_name), "found "+pathSegment);
594
591
currentDir = file ;
595
- relativePath = relativePath +"/" +pathSegment ;
592
+ if (!relativePath .equals ("" ))
593
+ relativePath += "/" ;
594
+ relativePath += pathSegment ;
596
595
}
597
596
else
598
597
{
@@ -605,48 +604,12 @@ protected Boolean doInBackground(String... path0) {
605
604
String fileUriString = file .getUri ().toString ();
606
605
uriTargetString = path .substring (0 ,path .lastIndexOf (relativePath ));
607
606
uriReplacementString = "" ;
608
- uriPrefixString = (uriTargetString .equals ("" ) ? fileUriString : fileUriString .replace (Uri .encode (relativePath ), "" ));
607
+ // uriPrefixString = (relativePath.equals("") ? fileUriString : fileUriString.replaceLast(Uri.encode(relativePath), ""));
608
+ uriPrefixString = fileUriString .substring (0 ,fileUriString .lastIndexOf (Uri .encode (relativePath )));
609
609
return true ;
610
610
}
611
611
else
612
612
return false ;
613
- // Log.i(getString(R.string.app_name), "path="+path);
614
- // Log.i(getString(R.string.app_name), "relativePath="+relativePath);
615
- // Log.i(getString(R.string.app_name), "fileUriString="+fileUriString);
616
- // Log.i(getString(R.string.app_name), "libraryFolderRootUri="+treeUri.toString());
617
- // Log.i(getString(R.string.app_name), "from this we guess:");
618
- // Log.i(getString(R.string.app_name), "uriTargetString="+uriTargetString);
619
- // Log.i(getString(R.string.app_name), "uriReplacementString="+uriReplacementString);
620
- // Log.i(getString(R.string.app_name), "uriPrefixString="+uriPrefixString);
621
- // Log.i(getString(R.string.app_name), "getUriInLibraryFolder(path).toString()="+Uri.decode(getUriInLibraryFolder(path).toString()));
622
- // Log.i(getString(R.string.app_name), "compared to "+Uri.decode(fileUriString));
623
- // Log.i(getString(R.string.app_name), "and "+Uri.decode(file.getUri().toString()));
624
-
625
- // Uri uri1 = file.getUri();
626
- // Uri uri2 = getUriInLibraryFolder(path);
627
- // Uri uri3 = Uri.parse(uri1.toString());
628
-
629
- // Log.i(getString(R.string.app_name), "uri1.equals(uri2)="+uri1.equals(uri2));
630
- // Log.i(getString(R.string.app_name), "uri1.compareTo(uri2)="+uri1.compareTo(uri2));
631
-
632
- // Log.i(getString(R.string.app_name), "uri1="+uri1.toString());
633
- // bibtexAdapter.checkCanWriteToUri(context, uri1);
634
-
635
- // Log.i(getString(R.string.app_name), "uri2="+uri2.toString());
636
- // bibtexAdapter.checkCanWriteToUri(context, uri2);
637
-
638
- // Log.i(getString(R.string.app_name), "uri3="+uri3.toString());
639
- // bibtexAdapter.checkCanWriteToUri(context, uri3);
640
-
641
- // Log.i(getString(R.string.app_name), "checking if we can write to uri from file");
642
- // bibtexAdapter.checkCanWriteToUri(context, file.getUri());
643
- // Log.i(getString(R.string.app_name), "checking if we can write to uri from getUriInLibraryFolder(path)");
644
- // bibtexAdapter.checkCanWriteToUri(context, getUriInLibraryFolder(path));
645
-
646
- // Log.i(getString(R.string.app_name), "checking if we can write to uri from file after converting to string and back");
647
- // bibtexAdapter.checkCanWriteToUri(context, Uri.parse(file.getUri().toString()));
648
- // Log.i(getString(R.string.app_name), "checking if we can write to uri from getUriInLibraryFolder(path) after converting to string and back");
649
- // bibtexAdapter.checkCanWriteToUri(context, Uri.parse(getUriInLibraryFolder(path).toString()));
650
613
}
651
614
@ Override
652
615
protected void onPostExecute (Boolean succees ) {
@@ -728,12 +691,13 @@ public void onCancel(DialogInterface dialog) {
728
691
729
692
Uri getUriInLibraryFolder (String path )
730
693
{
694
+ path = convertToLinuxLikePath (path );
731
695
//Some versions of Android suffer from this very stupid bug:
732
696
//http://stackoverflow.com/questions/16475317/android-bug-string-substring5-replace-empty-string
733
697
if (uriPrefixString == null || path == null )
734
698
return null ;
735
699
else
736
- return Uri .parse (uriPrefixString + Uri .encode ((uriTargetString == null || uriTargetString .equals ("" )) ? path : path .replace ( uriTargetString , uriReplacementString )));
700
+ return Uri .parse (uriPrefixString + Uri .encode ((uriTargetString == null || uriTargetString .equals ("" )) ? path : path .replaceFirst ( Pattern . quote ( uriTargetString ) , uriReplacementString )));
737
701
}
738
702
739
703
@@ -989,4 +953,11 @@ public void onDismiss(DialogInterface dialog) {
989
953
}
990
954
}
991
955
}
956
+
957
+ String convertToLinuxLikePath (String path ) {
958
+ path = path .replace ("\\ " ,"/" );
959
+ if (path .indexOf (":" )>=0 )
960
+ path = path .substring (path .indexOf (":" )+1 );
961
+ return path ;
962
+ }
992
963
}
0 commit comments