Procházet zdrojové kódy

Add a public function to open a file from assert -- 添加从assert打开文件的公共函数(resolve: #14375)
get crash when share pdf -- pdf share 闪退(resolve: #14374)
Add download and open pdf function -- 添加下载和打开pdf功能(resolve: #14373)
detail Add dynamic injection menu -- detail 增加动态注入菜单(resolve: #14365)

Ray Zhang před 4 roky
rodič
revize
4558bacd90

+ 39 - 0
ApexDrivers/RAUtilsLibrary/src/main/java/com/usai/redant/rautils/utils/RAUtil.java

@@ -33,6 +33,8 @@ import org.json.JSONException;
 import org.json.JSONObject;
 
 import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
@@ -65,6 +67,40 @@ public class RAUtil {
         return jsobj;
 
     }
+    public static File getFileFromAsset(Context context, String fileName) {
+
+        File file = new File(context.getCacheDir().getAbsolutePath()+"/"+fileName);
+        try
+        {
+            writeBytesToFile(context.getAssets().open(fileName),file);
+        } catch (IOException e)
+        {
+            e.printStackTrace();
+        }
+        return file;
+
+    }
+
+    public static void writeBytesToFile(InputStream is, File file) throws IOException{
+        FileOutputStream fos = null;
+        try {
+            byte[] data = new byte[2048];
+            int nbread = 0;
+            fos = new FileOutputStream(file);
+            while((nbread=is.read(data))>-1){
+                fos.write(data,0,nbread);
+            }
+        }
+        catch (Exception ex) {
+            ex.printStackTrace();
+
+        }
+        finally{
+            if (fos!=null){
+                fos.close();
+            }
+        }
+    }
     public static String getCurrentDateTime()
     {
         Calendar c = Calendar.getInstance();
@@ -84,6 +120,9 @@ public class RAUtil {
                 c.getTime()).toString();
         return date;
     }
+
+
+
     public static String getStringFromAsset(Context context, String fileName) {
         // 将json数据变成字符串
         StringBuilder stringBuilder = new StringBuilder();

+ 12 - 0
ApexDrivers/ratradefiling/src/main/AndroidManifest.xml

@@ -15,6 +15,18 @@
         android:supportsRtl="true"
         android:theme="@style/TradeFilingTheme"
         android:usesCleartextTraffic="true">
+
+        <provider
+            android:name="androidx.core.content.FileProvider"
+            android:authorities="com.usai.tradefiling.fileprovider"
+            android:exported="false"
+            android:grantUriPermissions="true">
+            <meta-data
+                android:name="android.support.FILE_PROVIDER_PATHS"
+                android:resource="@xml/provider_paths" />
+        </provider>
+
+
         <activity android:name=".home.FunctionPanelSettingActivity"></activity>
         <activity android:name=".home.CompanySelectActivity" /> <!-- <uses-library -->
         <!-- android:name="com.google.android.wearable" -->

+ 4 - 2
ApexDrivers/ratradefiling/src/main/java/com/usai/ratradefiling/TradeFilingApplication.java

@@ -217,9 +217,9 @@ public class TradeFilingApplication extends Application implements RAProviderHel
 	private Handler handler = new CheckUpdateHandler(this);
 	private Activity mCurrentActivity;
 
-	@Override
+//	@Override
 	public String getProviderAuthorities() {
-		return "com.usai.apex.fileprovider";
+		return "com.usai.tradefiling.fileprovider";
 	}
 
 	private static final class CheckUpdateHandler extends Handler {
@@ -615,4 +615,6 @@ public class TradeFilingApplication extends Application implements RAProviderHel
 		}
 		return "";
 	}
+
+
 }

+ 11 - 0
ApexDrivers/ratradefiling/src/main/java/com/usai/ratradefiling/dataprovider/OfflineDataProvider.java

@@ -1,17 +1,28 @@
 package com.usai.ratradefiling.dataprovider;
 
+import android.content.res.AssetManager;
 import android.os.Bundle;
 
 import com.usai.ratradefiling.TradeFilingApplication;
+import com.usai.redant.rautils.utils.RAUtil;
 
 import org.json.JSONException;
 import org.json.JSONObject;
 
+import java.io.File;
+
 import static com.usai.redant.rautils.utils.RAUtil.getJsonFromAsset;
 
 public class OfflineDataProvider {
 
+    public static File request_download(String filename)
+    {
+
 
+         return RAUtil.getFileFromAsset(TradeFilingApplication.get_instance().getApplicationContext(),filename);
+
+
+    }
 
     public static JSONObject request_retrievepass()
     {

+ 1 - 1
ApexDrivers/ratradefiling/src/main/java/com/usai/ratradefiling/dataprovider/OnlineDataProvider.java

@@ -971,7 +971,7 @@ public class OnlineDataProvider extends com.usai.redant.rautils.utils.Network
 //		}
 //	}
 
-	public static File downloadFile(Bundle params, String download_url,String dir) {
+	public static File request_download(Bundle params, String download_url,String dir) {
 		prepare_addtional_params(params);
 		return com.usai.redant.rautils.utils.Network.downloadFile(params, download_url, dir);
 	}

+ 7 - 1
ApexDrivers/ratradefiling/src/main/java/com/usai/ratradefiling/dataprovider/RADataProvider.java

@@ -258,7 +258,13 @@ public class RADataProvider {
 
     }
     public static File downloadFile(Bundle params, String download_url,String dir) {
-        return null;
+        if(FAKE_DATA)
+        {
+            return OfflineDataProvider.request_download("fake_export.pdf");
+        }
+        else {
+            return OnlineDataProvider.request_download(params,download_url,dir);
+        }
     }
     public static String getDisplayFieldsForFunction(String module_name)
     {

+ 44 - 115
ApexDrivers/ratradefiling/src/main/java/com/usai/ratradefiling/detail/DetailFragment.java

@@ -1251,124 +1251,42 @@ public class DetailFragment extends Fragment implements OnClickListener /*
 	JSONArray injectMenu;
 	Menu FragmentMenu;
 
+
+
 	@Override
 	public boolean onOptionsItemSelected(MenuItem item) {
 		if(item.getGroupId()!=-1)
 		{
 			return super.onOptionsItemSelected(item);
 		}
-		switch (item.getItemId())
-		{
-
-//			case android.R.id.home:
-//				finish();
-//				break;
-//			case R.id.action_addto_favorite:
-////	            LayoutInflater factory = LayoutInflater.from(this);
-////	            final View textEntryView = factory.inflate(R.layout.alert_dialog_text_entry, null);
-//				final View edit = new EditText(this);
-//				new AlertDialog.Builder(this)
-//						.setIconAttribute(android.R.attr.alertDialogIcon)
-//						.setTitle(R.string.str_createname)
-//						.setView(edit)
-//						.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
-//							public void onClick(DialogInterface dialog, int whichButton) {
-//								String name = ((EditText)edit).getText().toString();
-//								if(TextUtils.isEmpty(name))
-//								{
-//									new AlertDialog.Builder(NewDetailActivity.this)
-//											.setTitle("Warning")
-//											.setMessage("Name can not be empty.")
-//
-//											.setPositiveButton("OK", new DialogInterface.OnClickListener() {
-//												@Override
-//												public void onClick(DialogInterface dialog, int which) {
-//
-//												}
-//											})
-//											.show();
-//									return;
-//								}
-//
-//								JSONObject json = new JSONObject();
-//
-//								JSONArray actions = new JSONArray();
-//								int count = getIntent().getIntExtra("actions_count", 0);
-//								for (int i = 0; i < count; i++)
-//								{
-//
-//
-//									String title = getIntent().getStringExtra("action" + i);
-//
-//									actions.put(title);
-//
-//								}
-//
-//
-//
-//
-//
-//								try
-//								{
-//									json.put("actions",actions);
-//									json.put("bundle_params",RAUtil.Bundle2Json(paramsB)) ;
-//								} catch (JSONException e)
-//								{
-//									e.printStackTrace();
-//								}
-//
-//								boolean bsuccessful= RADataProvider.saveDetailParametersForModuleWithName(json, sub_type, name);
-//
-//
-//							}
-//						})
-//						.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
-//							public void onClick(DialogInterface dialog, int whichButton) {
-//
-//								/* User clicked cancel so do some stuff */
-//							}
-//						})
-//						.create().show();
-//				return true;
+		JSONObject jitem = injectMenu.optJSONObject(item.getItemId());
 
+		if(jitem==null)
+		{
+			return super.onOptionsItemSelected(item);
+		}
+		String type = jitem.optString("type");
+		if(type.toLowerCase().equals("quickview"))
+		{
+			String url = jitem.optString("url");
+			showQuickLook(url);
+		}
+		else if(type.toLowerCase().equals("editor"))
+		{
+			throw new AssertionError("Editor not impl");
 
-//			case R.id.action_share_detail: {
-//
-////				Intent share = new Intent();
-////				share.setAction(Intent.ACTION_SEND);
-//////				share.putExtra(Intent.EXTRA_STREAM, uri);
-////				share.setType("text/plain");
-////
-////
-////
-////
-////				if (email_content != null) {
-////					share.putExtra(Intent.EXTRA_TEXT, email_content);   //附带的说明信息
-////				}
-////				if (email_subject != null) {
-////					share.putExtra(Intent.EXTRA_SUBJECT, email_subject);
-////				}
-////				if (email_to != null) {
-////					share.putExtra(Intent.EXTRA_EMAIL, email_to.split(","));
-////				}
-////
-//////        share.putExtra(Intent.EXTRA_CC, new String[]{"ray.zhang@united-cn.net"});
-//////        startActivity(Intent.createChooser(share,getString(R.string.str_sendto)));
-////				startActivity(Intent.createChooser(share, "Share"));
-//			}
-//			break;
 		}
 		return super.onOptionsItemSelected(item);
-	}
 
-	@Override
-	public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
-		// TODO Add your menu entries here
 
-
-		FragmentMenu = menu;
+	}
+	void injectmenu()
+	{
 		if(injectMenu!=null&&FragmentMenu!=null)
 		{
+
+			FragmentMenu.removeGroup(-1);
+
 			for(int i=0;i<injectMenu.length();i++)
 			{
 				JSONObject item= injectMenu.optJSONObject(i);
@@ -1380,6 +1298,15 @@ public class DetailFragment extends Fragment implements OnClickListener /*
 			}
 
 		}
+	}
+	@Override
+	public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
+		// TODO Add your menu entries here
+
+
+		FragmentMenu = menu;
+
+		injectmenu();
 		super.onCreateOptionsMenu(menu, inflater);
 	}
 	@Override
@@ -1425,16 +1352,18 @@ public class DetailFragment extends Fragment implements OnClickListener /*
 
 			injectMenu= jsonResult.optJSONArray("page_menu");
 
-			if(injectMenu!=null&&FragmentMenu!=null)
-			{
-				for(int i=0;i<injectMenu.length();i++)
-				{
-					JSONObject item= injectMenu.optJSONObject(i);
-					FragmentMenu.addSubMenu(item.optString("title"));
-
-				}
-
-			}
+			injectmenu();
+//
+//			if(injectMenu!=null&&FragmentMenu!=null)
+//			{
+//				for(int i=0;i<injectMenu.length();i++)
+//				{
+//					JSONObject item= injectMenu.optJSONObject(i);
+//					FragmentMenu.addSubMenu(item.optString("title"));
+//
+//				}
+//
+//			}
 
 			fragment_content = jstr;
 			NewDetailActivity activity = (NewDetailActivity) getActivity();
@@ -1533,7 +1462,7 @@ public class DetailFragment extends Fragment implements OnClickListener /*
 
                 final Bundle param = new Bundle();
                 // 下载文件
-                final File downloadFile = OnlineDataProvider.downloadFile(param,url,cacheDir);
+                final File downloadFile = RADataProvider.downloadFile(param,url,cacheDir);
 
                 getActivity().runOnUiThread(new Runnable() {
                     @Override

+ 36 - 0
ApexDrivers/ratradefiling/src/main/res/xml/provider_paths.xml

@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8"?>
+<paths xmlns:android="http://schemas.android.com/apk/res/android">
+
+        <external-path
+            name="external"
+            path="."
+            />
+
+        <files-path
+            name="files"
+            path="."
+            />
+
+        <cache-path
+            name="caches"
+            path="."
+            />
+
+        <external-files-path
+            name="ex_f"
+            path="."
+            />
+
+        <external-cache-path
+            name="ex_c"
+            path="."
+            />
+
+        <!--<files-path path="offline" name="ra_files_offline"/>-->
+        <!--<files-path path="Photo" name="ra_files_photo"/>-->
+        <!--<files-path path="Signature" name="ra_files_signature"/>-->
+
+        <!--<cache-path path="Log" name="ra_cache_log"/>-->
+        <!--<cache-path path="ImageCache" name="ra_cache_images"/>-->
+
+</paths>