Skip to content

Commit

Permalink
fix custom mapping file can't be imported issue
Browse files Browse the repository at this point in the history
  • Loading branch information
plateaukao committed Oct 11, 2021
1 parent 9c56f49 commit cd2bfd8
Show file tree
Hide file tree
Showing 5 changed files with 200 additions and 44 deletions.
10 changes: 8 additions & 2 deletions LimeStudio/app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -49,12 +49,18 @@ android {
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/NOTICE.txt'
}

compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
lintOptions {
abortOnError false
}
}

dependencies {
implementation 'androidx.appcompat:appcompat:1.0.0'
implementation 'androidx.appcompat:appcompat:1.3.1'
implementation "androidx.activity:activity:1.3.1"
implementation 'androidx.documentfile:documentfile:1.0.1'

}
1 change: 0 additions & 1 deletion LimeStudio/app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,6 @@
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.USE_CREDENTIALS" />
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />

<application
android:allowBackup="false"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
import android.os.RemoteException;
import androidx.core.content.ContextCompat;
import androidx.documentfile.provider.DocumentFile;

import android.util.Log;

import net.toload.main.hd.data.KeyboardObj;
Expand Down
109 changes: 109 additions & 0 deletions LimeStudio/app/src/main/java/net/toload/main/hd/tools/FileUtil.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
package net.toload.main.hd.tools;

import android.content.Context;
import android.database.Cursor;
import android.net.Uri;
import android.provider.OpenableColumns;
import android.util.Log;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class FileUtil {
private static final int EOF = -1;
private static final int DEFAULT_BUFFER_SIZE = 1024 * 4;

private FileUtil() {

}

public static File from(Context context, Uri uri) throws IOException {
InputStream inputStream = context.getContentResolver().openInputStream(uri);
String fileName = getFileName(context, uri);
String[] splitName = splitFileName(fileName);
File tempFile = File.createTempFile(splitName[0], splitName[1]);
tempFile = rename(tempFile, fileName);
tempFile.deleteOnExit();
FileOutputStream out = null;
try {
out = new FileOutputStream(tempFile);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
if (inputStream != null) {
copy(inputStream, out);
inputStream.close();
}

if (out != null) {
out.close();
}
return tempFile;
}

private static String[] splitFileName(String fileName) {
String name = fileName;
String extension = "";
int i = fileName.lastIndexOf(".");
if (i != -1) {
name = fileName.substring(0, i);
extension = fileName.substring(i);
}

return new String[]{name, extension};
}

private static String getFileName(Context context, Uri uri) {
String result = null;
if (uri.getScheme().equals("content")) {
Cursor cursor = context.getContentResolver().query(uri, null, null, null, null);
try {
if (cursor != null && cursor.moveToFirst()) {
result = cursor.getString(cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME));
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (cursor != null) {
cursor.close();
}
}
}
if (result == null) {
result = uri.getPath();
int cut = result.lastIndexOf(File.separator);
if (cut != -1) {
result = result.substring(cut + 1);
}
}
return result;
}

private static File rename(File file, String newName) {
File newFile = new File(file.getParent(), newName);
if (!newFile.equals(file)) {
if (newFile.exists() && newFile.delete()) {
Log.d("FileUtil", "Delete old " + newName + " file");
}
if (file.renameTo(newFile)) {
Log.d("FileUtil", "Rename file to " + newName);
}
}
return newFile;
}

private static long copy(InputStream input, OutputStream output) throws IOException {
long count = 0;
int n;
byte[] buffer = new byte[DEFAULT_BUFFER_SIZE];
while (EOF != (n = input.read(buffer))) {
output.write(buffer, 0, n);
count += n;
}
return count;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -29,13 +29,25 @@
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.net.ConnectivityManager;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.os.RemoteException;

import androidx.activity.result.ActivityResult;
import androidx.activity.result.ActivityResultCallback;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.annotation.Nullable;
import androidx.fragment.app.DialogFragment;
import androidx.core.content.ContextCompat;

import android.provider.DocumentsContract;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
Expand All @@ -49,15 +61,18 @@

import net.toload.main.hd.DBServer;
import net.toload.main.hd.Lime;
import net.toload.main.hd.MainActivity;
import net.toload.main.hd.R;
import net.toload.main.hd.data.Word;
import net.toload.main.hd.global.LIMEPreferenceManager;
import net.toload.main.hd.global.LIMEProgressListener;
import net.toload.main.hd.global.LIMEUtilities;
import net.toload.main.hd.limedb.LimeDB;
import net.toload.main.hd.limesettings.LIMESelectFileAdapter;
import net.toload.main.hd.tools.FileUtil;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
Expand Down Expand Up @@ -113,6 +128,7 @@ public class SetupImLoadDialog extends DialogFragment {
List<File> flist;

private Thread loadthread;
private ActivityResultLauncher<Intent> mGetContent;

public SetupImLoadDialog(){}

Expand Down Expand Up @@ -163,6 +179,26 @@ public boolean onKey(android.content.DialogInterface dialog,
});
}

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

mGetContent = registerForActivityResult(
new ActivityResultContracts.StartActivityForResult(),
activityResult -> {
if (activityResult.getData() == null) return;

Uri uri = activityResult.getData().getData();
try {
File file = FileUtil.from(getContext(), uri);
loadMapping(file);
} catch (IOException e) {
e.printStackTrace();
}
});

}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
Expand Down Expand Up @@ -310,9 +346,10 @@ public void onClick(DialogInterface dialog, int which) {
btnSetupImDialogCustom.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
selectMappingFile();
//selectMappingFile();
selectCustomMappingFile();
handler.initialImButtons();
dismiss();
//dismiss();
}
});

Expand Down Expand Up @@ -590,6 +627,17 @@ public void onClick(View v) {
return rootView;
}

public void selectCustomMappingFile() {
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.setType("*/*");

// Optionally, specify a URI for the file that should appear in the
// system file picker when it loads.
File externalFileDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
intent.putExtra(DocumentsContract.EXTRA_INITIAL_URI, externalFileDir.toURI());

mGetContent.launch(intent);
}

public void selectMappingFile() {

Expand All @@ -608,22 +656,18 @@ public void onClick(View v) {

listview = dialog.findViewById(R.id.listview_loading_target);
toplayout = dialog.findViewById(R.id.linearlayout_loading_confirm_top);
File externalFileDir =ContextCompat.getExternalFilesDirs(getContext(), null)[0];
File externalFileDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
listview.setAdapter(getAdapter(externalFileDir));

createNavigationButtons(externalFileDir);
listview.setOnItemClickListener(new AdapterView.OnItemClickListener(){

@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
File f = flist.get(position);
if(f.isDirectory()){
listview.setAdapter(getAdapter(f));
createNavigationButtons(f);
}else{
getAvailableFiles(f.getAbsolutePath());
dialog.dismiss();
}
listview.setOnItemClickListener((arg0, arg1, position, arg3) -> {
File f = flist.get(position);
if(f.isDirectory()){
listview.setAdapter(getAdapter(f));
createNavigationButtons(f);
}else{
getAvailableFiles(f.getAbsolutePath());
dialog.dismiss();
}
});
dialog.show();
Expand Down Expand Up @@ -763,34 +807,32 @@ public void showToastMessage(String msg, int length) {

private List<File> getAvailableFiles(String path) {

List<File> templist = new ArrayList<File>();
List<File> list = new ArrayList<File>();
List<File> templist = new ArrayList<>();
List<File> list = new ArrayList<>();
File check = new File(path);

if (check.exists() && check.isDirectory() && check.listFiles() != null) {

for(File f: check.listFiles()){
if(true){
if(!f.isDirectory()){
if(imtype.equalsIgnoreCase(Lime.DB_RELATED)){
if( (f.getName().toLowerCase().startsWith(Lime.DB_RELATED) &&
f.getName().toLowerCase().endsWith(Lime.SUPPORT_FILE_EXT_LIMEDB))
){
list.add(f);
}
}else{
if( f.getName().toLowerCase().endsWith(Lime.SUPPORT_FILE_EXT_TXT) ||
(f.getName().toLowerCase().endsWith(Lime.SUPPORT_FILE_EXT_LIMEDB) &&
f.getName().toLowerCase().startsWith(imtype) ) ||
f.getName().toLowerCase().endsWith(Lime.SUPPORT_FILE_EXT_LIME) ||
f.getName().toLowerCase().endsWith(Lime.SUPPORT_FILE_EXT_CIN)
){
list.add(f);
}
if(!f.isDirectory()){
if(imtype.equalsIgnoreCase(Lime.DB_RELATED)){
if( (f.getName().toLowerCase().startsWith(Lime.DB_RELATED) &&
f.getName().toLowerCase().endsWith(Lime.SUPPORT_FILE_EXT_LIMEDB))
){
list.add(f);
}
}else{
list.add(f);
if( f.getName().toLowerCase().endsWith(Lime.SUPPORT_FILE_EXT_TXT) ||
(f.getName().toLowerCase().endsWith(Lime.SUPPORT_FILE_EXT_LIMEDB) &&
f.getName().toLowerCase().startsWith(imtype) ) ||
f.getName().toLowerCase().endsWith(Lime.SUPPORT_FILE_EXT_LIME) ||
f.getName().toLowerCase().endsWith(Lime.SUPPORT_FILE_EXT_CIN)
){
list.add(f);
}
}
}else{
list.add(f);
}
}

Expand Down Expand Up @@ -913,19 +955,16 @@ public void loadMapping(File unit) {

@Override
public void onProgress(long percentageDone, long var2, String status) {
if(status!=null && !status.isEmpty())
handler.updateProgress(status);
if(status!=null && !status.isEmpty()) handler.updateProgress(status);
handler.updateProgress( (int) percentageDone );
}
@Override
public void onStatusUpdate(String status){
if(status!=null && !status.isEmpty())
handler.updateProgress(status);
if(status!=null && !status.isEmpty()) handler.updateProgress(status);
}
@Override
public void onError(int code, String source){
if(source!=null && !source.isEmpty())
showToastMessage(source, Toast.LENGTH_LONG);
if(source!=null && !source.isEmpty()) showToastMessage(source, Toast.LENGTH_LONG);
}
@Override
public void onPostExecute(boolean success, String status, int code){
Expand Down Expand Up @@ -979,6 +1018,8 @@ public void onPostExecute(boolean success, String status, int code){
}

handler.cancelProgress();

dismiss();
}
});
} catch (RemoteException e) {
Expand Down

0 comments on commit cd2bfd8

Please sign in to comment.