Просмотр исходного кода

1.修改Android Apex Mobile About界面。
2.修改Android Apex Mobile Detail界面Web下载文档。

Pen Li 8 лет назад
Родитель
Сommit
23ae5d1c28

+ 5 - 6
Apex Mobile/app/src/main/java/com/usai/apex/AboutActivity.java

@@ -55,7 +55,7 @@ public class AboutActivity extends AppCompatActivity
 		setContentView(R.layout.activity_about);
 
 		setCustomActionBar();
-		final TextView tv_ver = (TextView) findViewById(R.id.tv_version);
+		final TextView tv_ver = (TextView) findViewById(R.id.about_ver_value_tv);
 
 		// String str =
 		// "<a href='https://ra.apexshipping.com/main.php?action=handset_search&action_type=download_doc&sessionid=hjqvgilu0o64d22qfqgat1afk2&url=QVRwVUswa3ZFNlBFTzhLbFpYcC9rVEhSZ1h0MGd6ekpwZ2ZqTkhXNnN2SytGM0FhRkhyNG5QbkdtV2tPMXZrK2p3' target=_blank>A1303540085F.pdf</a>";
@@ -79,13 +79,12 @@ public class AboutActivity extends AppCompatActivity
 //		}
 //		wv.getSettings().setDefaultTextEncodingName("UTF-8");
 //		wv.loadData(content, "text/html", null);
-//		
-		
+//
+
 		try
 		{
-			
-			tv_ver.setText(getText(R.string.str_ver)
-					+ ApexTrackingApplication.get_instance()
+
+			tv_ver.setText(ApexTrackingApplication.get_instance()
 							.getPackageManager()
 							.getPackageInfo("com.usai.apex", 0).versionName);
 		}

+ 193 - 110
Apex Mobile/app/src/main/java/com/usai/apex/DetailFragment.java

@@ -2,11 +2,13 @@ package com.usai.apex;
 
 import android.animation.Animator;
 import android.animation.AnimatorListenerAdapter;
+import android.app.Activity;
 import android.app.AlertDialog;
 import android.app.AlertDialog.Builder;
 import android.app.Dialog;
 import android.app.DownloadManager;
 import android.app.DownloadManager.Request;
+import android.app.ProgressDialog;
 import android.content.Context;
 import android.content.DialogInterface;
 import android.content.Intent;
@@ -27,6 +29,8 @@ import android.view.View;
 import android.view.View.OnClickListener;
 import android.view.ViewGroup;
 import android.webkit.DownloadListener;
+import android.webkit.WebResourceRequest;
+import android.webkit.WebResourceResponse;
 import android.webkit.WebView;
 import android.webkit.WebViewClient;
 import android.widget.Button;
@@ -38,11 +42,14 @@ import android.widget.TextView;
 import android.widget.Toast;
 
 import com.usai.util.Network;
+import com.usai.util.RAUtil;
 import com.usai.util.commonUtil;
 
 import org.json.JSONException;
 import org.json.JSONObject;
 
+import java.io.File;
+
 public class DetailFragment extends Fragment implements OnClickListener /*
 																		 * ,
 																		 * OnGestureListener
@@ -53,6 +60,14 @@ public class DetailFragment extends Fragment implements OnClickListener /*
 
 	// DataFragment mdataFragment;
 
+	Context mContext;
+	ProgressDialog progressDialog;
+	protected void showProgressDialog(String title, String msg) {
+		progressDialog.setTitle(title);
+		progressDialog.setMessage(msg);
+		progressDialog.show();
+	}
+
 	/* private GestureDetector mGestureDetector; */
 	@Override
 	public void onCreate(Bundle savedInstanceState)
@@ -60,6 +75,14 @@ public class DetailFragment extends Fragment implements OnClickListener /*
 		// TODO Auto-generated method stub
 		super.onCreate(savedInstanceState);
 
+		progressDialog = new ProgressDialog(getActivity());
+		progressDialog.setCancelable(false);
+	}
+
+	@Override
+	public void onAttach(Context context) {
+		super.onAttach(context);
+		mContext = context;
 	}
 
 	@Override
@@ -314,116 +337,117 @@ public class DetailFragment extends Fragment implements OnClickListener /*
 					wv.getSettings().setDefaultTextEncodingName("UTF-8");
 					wv.setId(commonUtil.generateViewId());
 					wv.setWebViewClient(new MyWebViewClient());
-					wv.setDownloadListener(new DownloadListener()
-					{
-
-						@Override
-						public void onDownloadStart(String url,
-								String userAgent, String contentDisposition,
-								String mimetype, long contentLength)
-						{
-							if(!commonUtil.localdirExist())
-							{
-								
-								new AlertDialog.Builder(getActivity())
-				                .setIconAttribute(android.R.attr.alertDialogIcon)
-				                .setTitle(R.string.str_localdir_error)
-				                .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
-				                    public void onClick(DialogInterface dialog, int whichButton) {
-
-				                        /* User clicked OK so do some stuff */
-				                    }
-				                })
-				                .create().show();
-								return;
-							}
-							String filename = contentDisposition.replace("attachment;filename=\"", "");
-							filename = filename.replace("\"", "");
-							
-							Log.d("WebView", "Download Action");
-							Log.d("tag", "url=" + url);
-							// Log.i("tag", "userAgent="+userAgent);
-							// Log.i("tag",
-							// "contentDisposition="+contentDisposition);
-							// Log.i("tag", "mimetype="+mimetype);
-							// Log.i("tag", "contentLength="+contentLength);
-							// Uri uri = Uri.parse(url);
-							// Intent intent = new Intent(Intent.ACTION_VIEW,
-							// uri);
-							// startActivity(intent);
-
-							final DownloadManager downloadManager = (DownloadManager) ApexTrackingApplication
-									.get_instance().getSystemService(
-											Context.DOWNLOAD_SERVICE);
-
-							Uri uri = Uri.parse(url);
-							final Request request = new Request(uri);
-
-							// 设置允许使用的网络类型,这里是移动网络和wifi都可以
-							request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_MOBILE
-									| DownloadManager.Request.NETWORK_WIFI);
-							
-							
-							
-							request.setDestinationInExternalPublicDir("Apex Mobile",filename); 
-
-							// 禁止发出通知,既后台下载,如果要使用这一句必须声明一个权限:android.permission.DOWNLOAD_WITHOUT_NOTIFICATION
-							// request.setShowRunningNotification(false);
-
-							// 不显示下载界面
-							request.setVisibleInDownloadsUi(false);
-							request.setNotificationVisibility(Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
-
-							/*
-							 * 设置下载后文件存放的位置,如果sdcard不可用,那么设置这个将报错,
-							 * 因此最好不设置如果sdcard可用,下载后的文件 在/mnt/sdcard/Android/
-							 * data/packageName/files目录下面
-							 * ,如果sdcard不可用,设置了下面这个将报错,不设置,下载后的文件在/cache这个 目录下面
-							 */
-							// request.setDestinationInExternalFilesDir(this,
-							// null, "tar.apk");
-
-//							getActivity();
-							AlertDialog.Builder builder = new Builder(
-									getActivity());
-							builder.setMessage(getString(R.string.str_downloadmessage));
-
-							builder.setTitle(getString(R.string.str_confirmdownload));
-
-							builder.setPositiveButton(
-									getString(R.string.str_download),
-									new Dialog.OnClickListener()
-									{
-
-										@Override
-										public void onClick(
-												DialogInterface dialog,
-												int which)
-										{
-											downloadManager.enqueue(request);
-											dialog.dismiss();
-
-										}
-									});
-
-							builder.setNegativeButton(
-									getString(R.string.str_cancel),
-									new Dialog.OnClickListener()
-									{
-
-										@Override
-										public void onClick(
-												DialogInterface dialog,
-												int which)
-										{
-											dialog.dismiss();
-										}
-									});
-
-							builder.create().show();
-						}
-
-					});
+//					wv.setDownloadListener(new DownloadListener()
+//					{
+//
+//						@Override
+//						public void onDownloadStart(String url,
+//								String userAgent, String contentDisposition,
+//								String mimetype, long contentLength)
+//						{
+//							if(!commonUtil.localdirExist())
+//							{
+//
+//								new AlertDialog.Builder(getActivity())
+//				                .setIconAttribute(android.R.attr.alertDialogIcon)
+//				                .setTitle(R.string.str_localdir_error)
+//				                .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
+//				                    public void onClick(DialogInterface dialog, int whichButton) {
+//
+//				                        /* User clicked OK so do some stuff */
+//				                    }
+//				                })
+//				                .create().show();
+//								return;
+//							}
+////							String filename = contentDisposition.replace("attachment;filename=\"", "");
+////							filename = filename.replace("\"", "");
+////
+////							Log.d("WebView", "Download Action");
+////							Log.d("tag", "url=" + url);
+////							// Log.i("tag", "userAgent="+userAgent);
+////							// Log.i("tag",
+////							// "contentDisposition="+contentDisposition);
+////							// Log.i("tag", "mimetype="+mimetype);
+////							// Log.i("tag", "contentLength="+contentLength);
+////							// Uri uri = Uri.parse(url);
+////							// Intent intent = new Intent(Intent.ACTION_VIEW,
+////							// uri);
+////							// startActivity(intent);
+////
+////							final DownloadManager downloadManager = (DownloadManager) ApexTrackingApplication
+////									.get_instance().getSystemService(
+////											Context.DOWNLOAD_SERVICE);
+////
+////							Uri uri = Uri.parse(url);
+////							final Request request = new Request(uri);
+////
+////							// 设置允许使用的网络类型,这里是移动网络和wifi都可以
+////							request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_MOBILE
+////									| DownloadManager.Request.NETWORK_WIFI);
+////
+////
+////
+////							request.setDestinationInExternalPublicDir("Apex Mobile",filename);
+////
+////							// 禁止发出通知,既后台下载,如果要使用这一句必须声明一个权限:android.permission.DOWNLOAD_WITHOUT_NOTIFICATION
+////							// request.setShowRunningNotification(false);
+////
+////							// 不显示下载界面
+////							request.setVisibleInDownloadsUi(false);
+////							request.setNotificationVisibility(Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
+////
+////							/*
+////							 * 设置下载后文件存放的位置,如果sdcard不可用,那么设置这个将报错,
+////							 * 因此最好不设置如果sdcard可用,下载后的文件 在/mnt/sdcard/Android/
+////							 * data/packageName/files目录下面
+////							 * ,如果sdcard不可用,设置了下面这个将报错,不设置,下载后的文件在/cache这个 目录下面
+////							 */
+////							// request.setDestinationInExternalFilesDir(this,
+////							// null, "tar.apk");
+////
+//////							getActivity();
+////							AlertDialog.Builder builder = new Builder(
+////									getActivity());
+////							builder.setMessage(getString(R.string.str_downloadmessage));
+////
+////							builder.setTitle(getString(R.string.str_confirmdownload));
+////
+////							builder.setPositiveButton(
+////									getString(R.string.str_download),
+////									new Dialog.OnClickListener()
+////									{
+////
+////										@Override
+////										public void onClick(
+////												DialogInterface dialog,
+////												int which)
+////										{
+////											downloadManager.enqueue(request);
+////											dialog.dismiss();
+////
+////										}
+////									});
+////
+////							builder.setNegativeButton(
+////									getString(R.string.str_cancel),
+////									new Dialog.OnClickListener()
+////									{
+////
+////										@Override
+////										public void onClick(
+////												DialogInterface dialog,
+////												int which)
+////										{
+////											dialog.dismiss();
+////										}
+////									});
+////
+////							builder.create().show();
+//
+//						}
+//
+//					});
 					control.put(v.getId(), wv.getId());
 					wv.loadData(content, mimeType, null);
 
@@ -727,27 +751,60 @@ public class DetailFragment extends Fragment implements OnClickListener /*
 	//
 	// }
 
+	public void download(String url) {
+
+		final String download_url = url;
+//		showProgressDialog("Please wait","Downloading...");
+		new Thread(new Runnable() {
+			@Override
+			public void run() {
+
+//									String cacheDir = ApexTrackingApplication.getInstance().getDocumentDir();
+				// 下载文件
+				final File downloadFile = Network.downloadFile(null,download_url,null);
+
+				getActivity().runOnUiThread(new Runnable() {
+					@Override
+					public void run() {
+//						progressDialog.dismiss();
+						RAUtil.openFile(getActivity(),downloadFile);
+					}
+				});
+
+			}
+		}).start();
+	}
+
 	public class MyWebViewClient extends WebViewClient
 	{
 		// 如果页面中链接,如果希望点击链接继续在当前browser中响应,
 		// 而不是新开Android的系统browser中响应该链接,必须覆盖 webview的WebViewClient对象。
 		public boolean shouldOverviewUrlLoading(WebView view, String url)
 		{
+			Log.d("Web Client", "shouldOverviewUrlLoading: " + url);
 			// L.i("shouldOverviewUrlLoading");
 			view.loadUrl(url);
 			return true;
 		}
 
+		@Override
+		public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
+			Log.d("Web Client", "shouldOverrideUrlLoading: " + request);
+			return super.shouldOverrideUrlLoading(view, request);
+		}
+
 		public void onPageStarted(WebView view, String url, Bitmap favicon)
 		{
 			// L.i("onPageStarted");
 			// showProgress();
+			Log.d("Web Client", "onPageStarted: ");
 		}
 
 		public void onPageFinished(WebView view, String url)
 		{
 			// L.i("onPageFinished");
 			// closeProgress();
+			Log.d("Web Client", "onPageFinished: ");
 		}
 
 		public void onReceivedError(WebView view, int errorCode,
@@ -755,7 +812,33 @@ public class DetailFragment extends Fragment implements OnClickListener /*
 		{
 			// L.i("onReceivedError");
 			// closeProgress();
+			Log.d("Web Client", "onReceivedError: ");
 		}
+
+		@Override
+		public WebResourceResponse shouldInterceptRequest(WebView view, String url) {
+
+			Log.d("Web Client", "shouldInterceptRequest: " + url);
+			if (url.startsWith("http") && url.contains("action_type=download_doc")) {
+				download(url);
+				return null;
+			} else {
+				return super.shouldInterceptRequest(view,url);
+			}
+		}
+
+//		@Override
+//		public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
+//			Log.d("Web Client", "shouldInterceptRequest: " + request);
+//
+//			if (request.getUrl().toString().contains("action_type=download_doc")) {
+//				return null;
+//			} else {
+//				return super.shouldInterceptRequest(view,request);
+//			}
+//
+//
+//		}
 	}
 
 }

+ 8 - 3
Apex Mobile/app/src/main/java/com/usai/apex/Result/SearchResultActivity.java

@@ -18,6 +18,7 @@ import android.text.Html;
 import android.text.Layout;
 import android.text.TextUtils;
 import android.util.Log;
+import android.util.TypedValue;
 import android.view.GestureDetector;
 import android.view.Gravity;
 import android.view.LayoutInflater;
@@ -33,6 +34,7 @@ import android.widget.RelativeLayout;
 import android.widget.TableRow;
 import android.widget.TextView;
 
+import com.usai.apex.ApexTrackingApplication;
 import com.usai.apex.R;
 import com.usai.util.Network;
 import com.usai.util.RAUtil;
@@ -909,7 +911,7 @@ public class SearchResultActivity extends AppCompatActivity {
 
                        // content
                        tv.setTextColor(Color.parseColor(f_color));
-
+                       tv.setTextSize(TypedValue.COMPLEX_UNIT_SP,14);
 
                        if (name.contains("</")) {
                            tv.setText(Html.fromHtml(name));
@@ -1000,6 +1002,7 @@ public class SearchResultActivity extends AppCompatActivity {
                        // content
 
                        tv.setTextColor(Color.parseColor(col_f_color));
+                       tv.setTextSize(TypedValue.COMPLEX_UNIT_SP,12);
 
                        if (value.contains("</")) {
                            tv.setText(Html.fromHtml(value));
@@ -1122,8 +1125,9 @@ public class SearchResultActivity extends AppCompatActivity {
             @Override
             public void run() {
 
+                String cacheDir = ApexTrackingApplication.getInstance().getDocumentDir();
                 // download & get path
-                final File downloadFile = Network.download_query(download_url);
+                final File downloadFile = Network.download_query(download_url,cacheDir);
                 final String path = downloadFile != null && downloadFile.exists() ? downloadFile.getPath() : null;
 
 
@@ -1211,8 +1215,9 @@ public class SearchResultActivity extends AppCompatActivity {
             @Override
             public void run() {
 
+                String cacheDir = ApexTrackingApplication.getInstance().getDocumentDir();
                 // 下载文件
-                final File downloadFile = Network.downloadFile(RAUtil.Json2Bundle(param),url);
+                final File downloadFile = Network.downloadFile(RAUtil.Json2Bundle(param),url,cacheDir);
 
                 runOnUiThread(new Runnable() {
                     @Override

+ 12 - 4
Apex Mobile/app/src/main/java/com/usai/util/Network.java

@@ -66,6 +66,7 @@ import android.database.sqlite.SQLiteStatement;
 import android.net.ConnectivityManager;
 import android.net.NetworkInfo;
 import android.os.Bundle;
+import android.os.Environment;
 import android.text.TextUtils;
 import android.util.Log;
 
@@ -1505,7 +1506,11 @@ public class Network
 		return null;
 	}
 
-	public static File downloadFile(Bundle params, String download_url) {
+	public static File downloadFile(Bundle params, String download_url,String dir) {
+
+		if (params == null) {
+			params = new Bundle();
+		}
 
 		prepare_addtional_params(params);
 		HttpURLConnection connection = null;
@@ -1514,7 +1519,10 @@ public class Network
 		try {
 
 			String fileName = UUID.randomUUID().toString();
-			String dir = ApexTrackingApplication.getInstance().getDocumentDir();
+			if (dir == null) {
+				dir = Environment.getExternalStorageDirectory() + File.separator + "download";
+			}
+
 			if (RAUtil.isFileExist(fileName,dir)) {
 				returnFile = new File(dir + File.separator + fileName);
 			} else {
@@ -1569,9 +1577,9 @@ public class Network
 		return returnFile;
 	}
 
-	public static File download_query(String download_url) {
+	public static File download_query(String download_url,String path) {
 
-		return downloadFile(null,download_url);
+		return downloadFile(null,download_url,path);
 	}
 
 	public  static JSONObject query(Bundle params) {

+ 55 - 0
Apex Mobile/app/src/main/java/com/usai/util/RAUtil.java

@@ -2,6 +2,7 @@ package com.usai.util;
 
 import android.app.Activity;
 import android.content.Context;
+import android.content.Intent;
 import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageManager;
 import android.graphics.Bitmap;
@@ -14,6 +15,7 @@ import android.os.Build;
 import android.os.Bundle;
 import android.os.Environment;
 import android.support.v4.app.ActivityCompat;
+import android.support.v4.content.FileProvider;
 import android.support.v4.content.PermissionChecker;
 import android.util.Log;
 import android.webkit.MimeTypeMap;
@@ -697,4 +699,57 @@ public class RAUtil {
         return mime;
     }
 
+    public static void openFile(Context context,File file) {
+
+        if (context == null || file == null || !file.exists()) {
+            return;
+        }
+
+        Uri uri = null;
+        String type = RAUtil.getMimeType(file.getPath());
+
+        // type "application/pdf"
+        Intent intent = new Intent(Intent.ACTION_VIEW);
+
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
+
+            // "com.usai.apex.fileprovider"即是在Manifest文件中配置的authorities
+            uri = FileProvider.getUriForFile(context, "com.usai.apex.fileprovider", file);
+            // 给目标应用一个临时授权
+            intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
+        } else {
+            uri = Uri.fromFile(file);
+        }
+
+        intent.setDataAndType(uri, type);
+
+        if (context.getPackageManager().resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY) != null) {
+            // someone knows how to handle this mime type with this scheme, don't download.
+            try {
+                context.startActivity(intent);
+                return;
+            } catch (Exception ex) {
+                Log.d("Open File", "activity not found for " + type + " over " + uri, ex);
+            }
+
+        } else {
+            Log.d("Open File", "openFileAtPath: " + "No App " + uri);
+            try {
+                shareFile(context,uri,type);
+            } catch (Exception e) {
+                Log.e("Show Dialog Error", "openFileAtPath: ", e);
+            }
+        }
+
+    }
+
+    public static void shareFile(Context context,Uri uri, String type) {
+
+        Intent shareIntent = new Intent();
+        shareIntent.setAction(Intent.ACTION_SEND);
+        shareIntent.putExtra(Intent.EXTRA_STREAM, uri);
+        shareIntent.setType(type);
+        context.startActivity(Intent.createChooser(shareIntent, "Share"));
+    }
+
 }

BIN
Apex Mobile/app/src/main/res/drawable-hdpi/apexlogo_large.png


BIN
Apex Mobile/app/src/main/res/drawable-ldpi/apexlogo_large.png


BIN
Apex Mobile/app/src/main/res/drawable-mdpi/apexlogo_large.png


BIN
Apex Mobile/app/src/main/res/drawable-xhdpi/apexlogo_large.png


BIN
Apex Mobile/app/src/main/res/drawable-xxhdpi/apexlogo_large.png


+ 1 - 1
Apex Mobile/app/src/main/res/drawable/result_black_border.xml

@@ -41,5 +41,5 @@
 
 <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
     <solid android:color="#00000000" />
-    <stroke android:width="0.5dp" android:color="#aaaaaa"/>
+    <stroke android:width="0.3dp" android:color="#aaaaaa"/>
 </shape>

+ 124 - 37
Apex Mobile/app/src/main/res/layout/activity_about.xml

@@ -1,51 +1,138 @@
-<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:tools="http://schemas.android.com/tools"
-    android:id="@+id/scrollView1"
-    android:layout_width="fill_parent"
-    android:layout_height="wrap_content"
-    android:paddingBottom="@dimen/activity_vertical_margin"
-    android:paddingLeft="@dimen/activity_horizontal_margin"
-    android:paddingRight="@dimen/activity_horizontal_margin"
-    android:paddingTop="@dimen/activity_vertical_margin"
-    tools:context=".AboutActivity" >
-
-    <LinearLayout
+<!--<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"-->
+    <!--xmlns:tools="http://schemas.android.com/tools"-->
+    <!--android:id="@+id/scrollView1"-->
+    <!--android:layout_width="fill_parent"-->
+    <!--android:layout_height="wrap_content"-->
+    <!--android:paddingBottom="@dimen/activity_vertical_margin"-->
+    <!--android:paddingLeft="@dimen/activity_horizontal_margin"-->
+    <!--android:paddingRight="@dimen/activity_horizontal_margin"-->
+    <!--android:paddingTop="@dimen/activity_vertical_margin"-->
+    <!--tools:context=".AboutActivity" >-->
+
+    <!--<LinearLayout-->
+        <!--android:layout_width="match_parent"-->
+        <!--android:layout_height="wrap_content"-->
+        <!--android:orientation="vertical" >-->
+
+        <!--<ImageView-->
+            <!--android:id="@+id/iv_thumb"-->
+            <!--android:layout_width="wrap_content"-->
+            <!--android:layout_height="wrap_content"-->
+            <!--android:src="@drawable/apexlogo_2" -->
+            <!--android:visibility="gone"/>-->
+
+        <!--<WebView-->
+            <!--android:id="@+id/webView1"-->
+            <!--android:layout_width="match_parent"-->
+            <!--android:layout_height="match_parent" -->
+            <!--android:visibility="gone"/>-->
+
+        <!--<TextView-->
+            <!--android:id="@+id/tv_version"-->
+            <!--android:layout_width="wrap_content"-->
+            <!--android:layout_height="wrap_content"-->
+            <!--android:layout_gravity="center_horizontal"-->
+            <!--android:gravity="center_horizontal"-->
+            <!--android:text="@string/str_version" -->
+           	<!--android:textSize="20sp"/>-->
+
+        <!--<TextView-->
+            <!--android:id="@+id/tv_content"-->
+            <!--android:layout_width="wrap_content"-->
+            <!--android:layout_height="wrap_content"-->
+            <!--android:layout_gravity="center_horizontal"-->
+            <!--android:layout_marginBottom="144dp"-->
+            <!--android:autoLink="email"-->
+            <!--android:gravity="center_horizontal"-->
+            <!--android:text="@string/str_tech_support"-->
+            <!--android:textSize="20sp"/>-->
+    <!--</LinearLayout>-->
+
+<!--</ScrollView>-->
+
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+            xmlns:tools="http://schemas.android.com/tools"
+            android:id="@+id/about_root"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:paddingBottom="@dimen/activity_vertical_margin"
+            android:paddingLeft="@dimen/activity_horizontal_margin"
+            android:paddingRight="@dimen/activity_horizontal_margin"
+            android:paddingTop="@dimen/activity_vertical_margin"
+            tools:context=".AboutActivity" >
+
+    <ImageView
+        android:id="@+id/about_logo_iv"
+        android:layout_centerHorizontal="true"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:src="@drawable/apexlogo_large"
+        android:layout_marginTop="20dp"
+        />
+
+    <RelativeLayout
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:orientation="vertical" >
+        android:layout_centerVertical="true"
+        >
 
-        <ImageView
-            android:id="@+id/iv_thumb"
+        <TextView
+            android:id="@+id/about_name_tv"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:src="@drawable/apexlogo_2" 
-            android:visibility="gone"/>
-
-        <WebView
-            android:id="@+id/webView1"
-            android:layout_width="match_parent"
-            android:layout_height="match_parent" 
-            android:visibility="gone"/>
+            android:text="Apex Mobile"
+            android:textSize="17sp"
+            android:layout_centerHorizontal="true"
+            android:textColor="#000000"
+            android:layout_marginTop="20dp"
+            />
 
         <TextView
-            android:id="@+id/tv_version"
+            android:id="@+id/about_ver_key_tv"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:layout_gravity="center_horizontal"
-            android:gravity="center_horizontal"
-            android:text="@string/str_version" 
-           	android:textSize="20sp"/>
-
+            android:layout_centerHorizontal="true"
+            android:layout_below="@id/about_name_tv"
+            android:layout_marginTop="25dp"
+            android:text="@string/about_ver_key"
+            android:textSize="14sp"
+            android:textColor="#000000"
+            />
         <TextView
-            android:id="@+id/tv_content"
+            android:id="@+id/about_ver_value_tv"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:layout_gravity="center_horizontal"
-            android:layout_marginBottom="144dp"
+            android:layout_centerHorizontal="true"
+            android:layout_below="@id/about_ver_key_tv"
+            android:layout_marginTop="5dp"
+            android:text="@string/about_ver_value"
+            android:textSize="14sp"
+            android:textColor="#000000"
+            />
+        <TextView
+            android:id="@+id/about_support_key_tv"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_centerHorizontal="true"
+            android:layout_below="@id/about_ver_value_tv"
+            android:layout_marginTop="5dp"
+            android:text="@string/about_support_key"
+            android:textSize="14sp"
+            android:textColor="#000000"
+            />
+        <TextView
+            android:id="@+id/about_support_value_tv"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_centerHorizontal="true"
+            android:layout_below="@id/about_support_key_tv"
+            android:layout_marginTop="5dp"
             android:autoLink="email"
-            android:gravity="center_horizontal"
-            android:text="@string/str_tech_support"
-            android:textSize="20sp"/>
-    </LinearLayout>
+            android:text="@string/about_support_value"
+            android:textSize="14sp"
+            android:textColor="#000000"
+            />
+
+    </RelativeLayout>
 
-</ScrollView>
+</RelativeLayout>

+ 8 - 0
Apex Mobile/app/src/main/res/layout/fragment_login.xml

@@ -115,4 +115,12 @@
         android:layout_margin="10dp"
         android:text="TextView" />
 
+    <ImageView
+        android:layout_width="276dp"
+        android:layout_height="120dp"
+        android:layout_centerHorizontal="true"
+        android:layout_below="@id/tv_ver"
+        android:layout_above="@id/login_form"
+        android:src="@drawable/apexlogo_large"/>
+
 </RelativeLayout>

+ 5 - 0
Apex Mobile/app/src/main/res/values-zh-rCN/strings.xml

@@ -120,4 +120,9 @@
     <string name="title_activity_localdocuments">本地文档</string>
     <string name="title_activity_settings">设置</string>
 
+    <string name="about_ver_key">版本:</string>
+    <string name="about_ver_value">A180214</string>
+    <string name="about_support_key">技术支持:</string>
+    <string name="about_support_value">usairedant@united-us.net</string>
+
 </resources>

+ 5 - 0
Apex Mobile/app/src/main/res/values/strings.xml

@@ -133,4 +133,9 @@
     <!-- DEBUG KEY -->
     <!-- <string name="baidu_key">tznWFxd3RvSoul1TGQp6GSzo</string> -->
 
+    <string name="about_ver_key">Version:</string>
+    <string name="about_ver_value">A180214</string>
+    <string name="about_support_key">Support:</string>
+    <string name="about_support_value">usairedant@united-us.net</string>
+
 </resources>