Compare commits
	
		
			24 Commits 
		
	
	
	| Author | SHA1 | Date | 
|---|---|---|
|  | ad203b292d | 5 years ago | 
|  | 00fd88c259 | 5 years ago | 
|  | ed24593d5c | 5 years ago | 
|  | b77f795b3d | 5 years ago | 
|  | 2263780073 | 5 years ago | 
|  | cbb98f0ff5 | 5 years ago | 
|  | 165709991f | 5 years ago | 
|  | 6d6848ed94 | 5 years ago | 
|  | 0f335e154b | 5 years ago | 
|  | 23a99f6cd9 | 5 years ago | 
|  | dc5ff74a9e | 5 years ago | 
|  | 21d9d4215e | 6 years ago | 
|  | 46c743cb26 | 6 years ago | 
|  | 888ce12ddc | 6 years ago | 
|  | 32e71c030e | 6 years ago | 
|  | 946b6e8550 | 6 years ago | 
|  | d7a9bd8dd0 | 6 years ago | 
|  | 6dee0be157 | 6 years ago | 
|  | b68626587a | 6 years ago | 
|  | bd74ae12ce | 6 years ago | 
|  | 62210f4b88 | 6 years ago | 
|  | 76f489f8d2 | 6 years ago | 
|  | 4f4e977604 | 6 years ago | 
|  | 38d7641303 | 6 years ago | 
| @ -0,0 +1,27 @@ | ||||
| version: 2 | ||||
| jobs: | ||||
|   build: | ||||
|     working_directory: ~/code | ||||
|     docker: | ||||
|       - image: circleci/android:api-28 | ||||
|     environment: | ||||
|       JVM_OPTS: -Xmx3200m | ||||
|     steps: | ||||
|       - checkout | ||||
|       - restore_cache: | ||||
|           key: jars-{{ checksum "build.gradle" }}-{{ checksum  "app/build.gradle" }} | ||||
|       - run: | ||||
|           name: Download Dependencies | ||||
|           command: ./gradlew androidDependencies | ||||
|       - save_cache: | ||||
|           paths: | ||||
|             - ~/.gradle | ||||
|           key: jars-{{ checksum "build.gradle" }}-{{ checksum  "app/build.gradle" }} | ||||
|       - run: | ||||
|           name: Run Tests | ||||
|           command: ./gradlew lint test | ||||
|       - store_artifacts: | ||||
|           path: app/build/reports | ||||
|           destination: reports | ||||
|       - store_test_results: | ||||
|           path: app/build/test-results | ||||
									
										Binary file not shown.
									
								
							
						| @ -1,52 +0,0 @@ | ||||
| <component name="ProjectCodeStyleConfiguration"> | ||||
|   <code_scheme name="Project" version="173"> | ||||
|     <DBN-PSQL> | ||||
|       <case-options enabled="true"> | ||||
|         <option name="KEYWORD_CASE" value="lower" /> | ||||
|         <option name="FUNCTION_CASE" value="lower" /> | ||||
|         <option name="PARAMETER_CASE" value="lower" /> | ||||
|         <option name="DATATYPE_CASE" value="lower" /> | ||||
|         <option name="OBJECT_CASE" value="preserve" /> | ||||
|       </case-options> | ||||
|       <formatting-settings enabled="false" /> | ||||
|     </DBN-PSQL> | ||||
|     <DBN-SQL> | ||||
|       <case-options enabled="true"> | ||||
|         <option name="KEYWORD_CASE" value="lower" /> | ||||
|         <option name="FUNCTION_CASE" value="lower" /> | ||||
|         <option name="PARAMETER_CASE" value="lower" /> | ||||
|         <option name="DATATYPE_CASE" value="lower" /> | ||||
|         <option name="OBJECT_CASE" value="preserve" /> | ||||
|       </case-options> | ||||
|       <formatting-settings enabled="false"> | ||||
|         <option name="STATEMENT_SPACING" value="one_line" /> | ||||
|         <option name="CLAUSE_CHOP_DOWN" value="chop_down_if_statement_long" /> | ||||
|         <option name="ITERATION_ELEMENTS_WRAPPING" value="chop_down_if_not_single" /> | ||||
|       </formatting-settings> | ||||
|     </DBN-SQL> | ||||
|     <DBN-PSQL> | ||||
|       <case-options enabled="true"> | ||||
|         <option name="KEYWORD_CASE" value="lower" /> | ||||
|         <option name="FUNCTION_CASE" value="lower" /> | ||||
|         <option name="PARAMETER_CASE" value="lower" /> | ||||
|         <option name="DATATYPE_CASE" value="lower" /> | ||||
|         <option name="OBJECT_CASE" value="preserve" /> | ||||
|       </case-options> | ||||
|       <formatting-settings enabled="false" /> | ||||
|     </DBN-PSQL> | ||||
|     <DBN-SQL> | ||||
|       <case-options enabled="true"> | ||||
|         <option name="KEYWORD_CASE" value="lower" /> | ||||
|         <option name="FUNCTION_CASE" value="lower" /> | ||||
|         <option name="PARAMETER_CASE" value="lower" /> | ||||
|         <option name="DATATYPE_CASE" value="lower" /> | ||||
|         <option name="OBJECT_CASE" value="preserve" /> | ||||
|       </case-options> | ||||
|       <formatting-settings enabled="false"> | ||||
|         <option name="STATEMENT_SPACING" value="one_line" /> | ||||
|         <option name="CLAUSE_CHOP_DOWN" value="chop_down_if_statement_long" /> | ||||
|         <option name="ITERATION_ELEMENTS_WRAPPING" value="chop_down_if_not_single" /> | ||||
|       </formatting-settings> | ||||
|     </DBN-SQL> | ||||
|   </code_scheme> | ||||
| </component> | ||||
| @ -1,8 +0,0 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <project version="4"> | ||||
|   <component name="CompilerConfiguration"> | ||||
|     <annotationProcessing> | ||||
|       <profile default="true" name="Default" enabled="true" /> | ||||
|     </annotationProcessing> | ||||
|   </component> | ||||
| </project> | ||||
| @ -1,456 +0,0 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <project version="4"> | ||||
|   <component name="DBNavigator.Project.DataEditorManager"> | ||||
|     <record-view-column-sorting-type value="BY_INDEX" /> | ||||
|     <value-preview-text-wrapping value="true" /> | ||||
|     <value-preview-pinned value="false" /> | ||||
|   </component> | ||||
|   <component name="DBNavigator.Project.DataExportManager"> | ||||
|     <export-instructions> | ||||
|       <create-header value="true" /> | ||||
|       <quote-values-containing-separator value="true" /> | ||||
|       <quote-all-values value="false" /> | ||||
|       <value-separator value="" /> | ||||
|       <file-name value="" /> | ||||
|       <file-location value="" /> | ||||
|       <scope value="GLOBAL" /> | ||||
|       <destination value="FILE" /> | ||||
|       <format value="EXCEL" /> | ||||
|       <charset value="GBK" /> | ||||
|     </export-instructions> | ||||
|   </component> | ||||
|   <component name="DBNavigator.Project.DatabaseBrowserManager"> | ||||
|     <autoscroll-to-editor value="false" /> | ||||
|     <autoscroll-from-editor value="true" /> | ||||
|     <show-object-properties value="true" /> | ||||
|     <loaded-nodes /> | ||||
|   </component> | ||||
|   <component name="DBNavigator.Project.DatabaseFileManager"> | ||||
|     <open-files /> | ||||
|   </component> | ||||
|   <component name="DBNavigator.Project.EditorStateManager"> | ||||
|     <last-used-providers /> | ||||
|   </component> | ||||
|   <component name="DBNavigator.Project.MethodExecutionManager"> | ||||
|     <method-browser /> | ||||
|     <execution-history> | ||||
|       <group-entries value="true" /> | ||||
|       <execution-inputs /> | ||||
|     </execution-history> | ||||
|     <argument-values-cache /> | ||||
|   </component> | ||||
|   <component name="DBNavigator.Project.ObjectDependencyManager"> | ||||
|     <last-used-dependency-type value="INCOMING" /> | ||||
|   </component> | ||||
|   <component name="DBNavigator.Project.ObjectQuickFilterManager"> | ||||
|     <last-used-operator value="EQUAL" /> | ||||
|     <filters /> | ||||
|   </component> | ||||
|   <component name="DBNavigator.Project.ScriptExecutionManager" clear-outputs="true"> | ||||
|     <recently-used-interfaces /> | ||||
|   </component> | ||||
|   <component name="DBNavigator.Project.Settings"> | ||||
|     <connections /> | ||||
|     <browser-settings> | ||||
|       <general> | ||||
|         <display-mode value="TABBED" /> | ||||
|         <navigation-history-size value="100" /> | ||||
|         <show-object-details value="false" /> | ||||
|       </general> | ||||
|       <filters> | ||||
|         <object-type-filter> | ||||
|           <object-type name="SCHEMA" enabled="true" /> | ||||
|           <object-type name="USER" enabled="true" /> | ||||
|           <object-type name="ROLE" enabled="true" /> | ||||
|           <object-type name="PRIVILEGE" enabled="true" /> | ||||
|           <object-type name="CHARSET" enabled="true" /> | ||||
|           <object-type name="TABLE" enabled="true" /> | ||||
|           <object-type name="VIEW" enabled="true" /> | ||||
|           <object-type name="MATERIALIZED_VIEW" enabled="true" /> | ||||
|           <object-type name="NESTED_TABLE" enabled="true" /> | ||||
|           <object-type name="COLUMN" enabled="true" /> | ||||
|           <object-type name="INDEX" enabled="true" /> | ||||
|           <object-type name="CONSTRAINT" enabled="true" /> | ||||
|           <object-type name="DATASET_TRIGGER" enabled="true" /> | ||||
|           <object-type name="DATABASE_TRIGGER" enabled="true" /> | ||||
|           <object-type name="SYNONYM" enabled="true" /> | ||||
|           <object-type name="SEQUENCE" enabled="true" /> | ||||
|           <object-type name="PROCEDURE" enabled="true" /> | ||||
|           <object-type name="FUNCTION" enabled="true" /> | ||||
|           <object-type name="PACKAGE" enabled="true" /> | ||||
|           <object-type name="TYPE" enabled="true" /> | ||||
|           <object-type name="TYPE_ATTRIBUTE" enabled="true" /> | ||||
|           <object-type name="ARGUMENT" enabled="true" /> | ||||
|           <object-type name="DIMENSION" enabled="true" /> | ||||
|           <object-type name="CLUSTER" enabled="true" /> | ||||
|           <object-type name="DBLINK" enabled="true" /> | ||||
|         </object-type-filter> | ||||
|       </filters> | ||||
|       <sorting> | ||||
|         <object-type name="COLUMN" sorting-type="NAME" /> | ||||
|         <object-type name="FUNCTION" sorting-type="NAME" /> | ||||
|         <object-type name="PROCEDURE" sorting-type="NAME" /> | ||||
|         <object-type name="ARGUMENT" sorting-type="POSITION" /> | ||||
|       </sorting> | ||||
|       <default-editors> | ||||
|         <object-type name="VIEW" editor-type="SELECTION" /> | ||||
|         <object-type name="PACKAGE" editor-type="SELECTION" /> | ||||
|         <object-type name="TYPE" editor-type="SELECTION" /> | ||||
|       </default-editors> | ||||
|     </browser-settings> | ||||
|     <navigation-settings> | ||||
|       <lookup-filters> | ||||
|         <lookup-objects> | ||||
|           <object-type name="SCHEMA" enabled="true" /> | ||||
|           <object-type name="USER" enabled="false" /> | ||||
|           <object-type name="ROLE" enabled="false" /> | ||||
|           <object-type name="PRIVILEGE" enabled="false" /> | ||||
|           <object-type name="CHARSET" enabled="false" /> | ||||
|           <object-type name="TABLE" enabled="true" /> | ||||
|           <object-type name="VIEW" enabled="true" /> | ||||
|           <object-type name="MATERIALIZED VIEW" enabled="true" /> | ||||
|           <object-type name="NESTED TABLE" enabled="false" /> | ||||
|           <object-type name="COLUMN" enabled="false" /> | ||||
|           <object-type name="INDEX" enabled="true" /> | ||||
|           <object-type name="CONSTRAINT" enabled="true" /> | ||||
|           <object-type name="DATASET TRIGGER" enabled="true" /> | ||||
|           <object-type name="DATABASE TRIGGER" enabled="true" /> | ||||
|           <object-type name="SYNONYM" enabled="false" /> | ||||
|           <object-type name="SEQUENCE" enabled="true" /> | ||||
|           <object-type name="PROCEDURE" enabled="true" /> | ||||
|           <object-type name="FUNCTION" enabled="true" /> | ||||
|           <object-type name="PACKAGE" enabled="true" /> | ||||
|           <object-type name="TYPE" enabled="true" /> | ||||
|           <object-type name="TYPE ATTRIBUTE" enabled="false" /> | ||||
|           <object-type name="ARGUMENT" enabled="false" /> | ||||
|           <object-type name="DIMENSION" enabled="false" /> | ||||
|           <object-type name="CLUSTER" enabled="false" /> | ||||
|           <object-type name="DBLINK" enabled="true" /> | ||||
|         </lookup-objects> | ||||
|         <force-database-load value="false" /> | ||||
|         <prompt-connection-selection value="true" /> | ||||
|         <prompt-schema-selection value="true" /> | ||||
|       </lookup-filters> | ||||
|     </navigation-settings> | ||||
|     <dataset-grid-settings> | ||||
|       <general> | ||||
|         <enable-zooming value="true" /> | ||||
|         <enable-column-tooltip value="true" /> | ||||
|       </general> | ||||
|       <sorting> | ||||
|         <nulls-first value="true" /> | ||||
|         <max-sorting-columns value="4" /> | ||||
|       </sorting> | ||||
|       <tracking-columns> | ||||
|         <columnNames value="" /> | ||||
|         <visible value="true" /> | ||||
|         <editable value="false" /> | ||||
|       </tracking-columns> | ||||
|     </dataset-grid-settings> | ||||
|     <dataset-editor-settings> | ||||
|       <text-editor-popup> | ||||
|         <active value="false" /> | ||||
|         <active-if-empty value="false" /> | ||||
|         <data-length-threshold value="100" /> | ||||
|         <popup-delay value="1000" /> | ||||
|       </text-editor-popup> | ||||
|       <values-actions-popup> | ||||
|         <show-popup-button value="true" /> | ||||
|         <element-count-threshold value="1000" /> | ||||
|         <data-length-threshold value="250" /> | ||||
|       </values-actions-popup> | ||||
|       <general> | ||||
|         <fetch-block-size value="100" /> | ||||
|         <fetch-timeout value="30" /> | ||||
|         <trim-whitespaces value="true" /> | ||||
|         <convert-empty-strings-to-null value="true" /> | ||||
|         <select-content-on-cell-edit value="true" /> | ||||
|         <large-value-preview-active value="true" /> | ||||
|       </general> | ||||
|       <filters> | ||||
|         <prompt-filter-dialog value="true" /> | ||||
|         <default-filter-type value="BASIC" /> | ||||
|       </filters> | ||||
|       <qualified-text-editor text-length-threshold="300"> | ||||
|         <content-types> | ||||
|           <content-type name="Text" enabled="true" /> | ||||
|           <content-type name="Properties" enabled="true" /> | ||||
|           <content-type name="XML" enabled="true" /> | ||||
|           <content-type name="DTD" enabled="true" /> | ||||
|           <content-type name="HTML" enabled="true" /> | ||||
|           <content-type name="XHTML" enabled="true" /> | ||||
|           <content-type name="Java" enabled="true" /> | ||||
|           <content-type name="SQL" enabled="true" /> | ||||
|           <content-type name="PL/SQL" enabled="true" /> | ||||
|           <content-type name="Groovy" enabled="true" /> | ||||
|           <content-type name="AIDL" enabled="true" /> | ||||
|           <content-type name="YAML" enabled="true" /> | ||||
|           <content-type name="Manifest" enabled="true" /> | ||||
|         </content-types> | ||||
|       </qualified-text-editor> | ||||
|       <record-navigation> | ||||
|         <navigation-target value="VIEWER" /> | ||||
|       </record-navigation> | ||||
|     </dataset-editor-settings> | ||||
|     <code-editor-settings> | ||||
|       <general> | ||||
|         <show-object-navigation-gutter value="false" /> | ||||
|         <show-spec-declaration-navigation-gutter value="true" /> | ||||
|         <enable-spellchecking value="true" /> | ||||
|         <enable-reference-spellchecking value="false" /> | ||||
|       </general> | ||||
|       <confirmations> | ||||
|         <save-changes value="false" /> | ||||
|         <revert-changes value="true" /> | ||||
|       </confirmations> | ||||
|     </code-editor-settings> | ||||
|     <code-completion-settings> | ||||
|       <filters> | ||||
|         <basic-filter> | ||||
|           <filter-element type="RESERVED_WORD" id="keyword" selected="true" /> | ||||
|           <filter-element type="RESERVED_WORD" id="function" selected="true" /> | ||||
|           <filter-element type="RESERVED_WORD" id="parameter" selected="true" /> | ||||
|           <filter-element type="RESERVED_WORD" id="datatype" selected="true" /> | ||||
|           <filter-element type="RESERVED_WORD" id="exception" selected="true" /> | ||||
|           <filter-element type="OBJECT" id="schema" selected="true" /> | ||||
|           <filter-element type="OBJECT" id="role" selected="true" /> | ||||
|           <filter-element type="OBJECT" id="user" selected="true" /> | ||||
|           <filter-element type="OBJECT" id="privilege" selected="true" /> | ||||
|           <user-schema> | ||||
|             <filter-element type="OBJECT" id="table" selected="true" /> | ||||
|             <filter-element type="OBJECT" id="view" selected="true" /> | ||||
|             <filter-element type="OBJECT" id="materialized view" selected="true" /> | ||||
|             <filter-element type="OBJECT" id="index" selected="true" /> | ||||
|             <filter-element type="OBJECT" id="constraint" selected="true" /> | ||||
|             <filter-element type="OBJECT" id="trigger" selected="true" /> | ||||
|             <filter-element type="OBJECT" id="synonym" selected="false" /> | ||||
|             <filter-element type="OBJECT" id="sequence" selected="true" /> | ||||
|             <filter-element type="OBJECT" id="procedure" selected="true" /> | ||||
|             <filter-element type="OBJECT" id="function" selected="true" /> | ||||
|             <filter-element type="OBJECT" id="package" selected="true" /> | ||||
|             <filter-element type="OBJECT" id="type" selected="true" /> | ||||
|             <filter-element type="OBJECT" id="dimension" selected="true" /> | ||||
|             <filter-element type="OBJECT" id="cluster" selected="true" /> | ||||
|             <filter-element type="OBJECT" id="dblink" selected="true" /> | ||||
|           </user-schema> | ||||
|           <public-schema> | ||||
|             <filter-element type="OBJECT" id="table" selected="false" /> | ||||
|             <filter-element type="OBJECT" id="view" selected="false" /> | ||||
|             <filter-element type="OBJECT" id="materialized view" selected="false" /> | ||||
|             <filter-element type="OBJECT" id="index" selected="false" /> | ||||
|             <filter-element type="OBJECT" id="constraint" selected="false" /> | ||||
|             <filter-element type="OBJECT" id="trigger" selected="false" /> | ||||
|             <filter-element type="OBJECT" id="synonym" selected="false" /> | ||||
|             <filter-element type="OBJECT" id="sequence" selected="false" /> | ||||
|             <filter-element type="OBJECT" id="procedure" selected="false" /> | ||||
|             <filter-element type="OBJECT" id="function" selected="false" /> | ||||
|             <filter-element type="OBJECT" id="package" selected="false" /> | ||||
|             <filter-element type="OBJECT" id="type" selected="false" /> | ||||
|             <filter-element type="OBJECT" id="dimension" selected="false" /> | ||||
|             <filter-element type="OBJECT" id="cluster" selected="false" /> | ||||
|             <filter-element type="OBJECT" id="dblink" selected="false" /> | ||||
|           </public-schema> | ||||
|           <any-schema> | ||||
|             <filter-element type="OBJECT" id="table" selected="true" /> | ||||
|             <filter-element type="OBJECT" id="view" selected="true" /> | ||||
|             <filter-element type="OBJECT" id="materialized view" selected="true" /> | ||||
|             <filter-element type="OBJECT" id="index" selected="true" /> | ||||
|             <filter-element type="OBJECT" id="constraint" selected="true" /> | ||||
|             <filter-element type="OBJECT" id="trigger" selected="true" /> | ||||
|             <filter-element type="OBJECT" id="synonym" selected="true" /> | ||||
|             <filter-element type="OBJECT" id="sequence" selected="true" /> | ||||
|             <filter-element type="OBJECT" id="procedure" selected="true" /> | ||||
|             <filter-element type="OBJECT" id="function" selected="true" /> | ||||
|             <filter-element type="OBJECT" id="package" selected="true" /> | ||||
|             <filter-element type="OBJECT" id="type" selected="true" /> | ||||
|             <filter-element type="OBJECT" id="dimension" selected="true" /> | ||||
|             <filter-element type="OBJECT" id="cluster" selected="true" /> | ||||
|             <filter-element type="OBJECT" id="dblink" selected="true" /> | ||||
|           </any-schema> | ||||
|         </basic-filter> | ||||
|         <extended-filter> | ||||
|           <filter-element type="RESERVED_WORD" id="keyword" selected="true" /> | ||||
|           <filter-element type="RESERVED_WORD" id="function" selected="true" /> | ||||
|           <filter-element type="RESERVED_WORD" id="parameter" selected="true" /> | ||||
|           <filter-element type="RESERVED_WORD" id="datatype" selected="true" /> | ||||
|           <filter-element type="RESERVED_WORD" id="exception" selected="true" /> | ||||
|           <filter-element type="OBJECT" id="schema" selected="true" /> | ||||
|           <filter-element type="OBJECT" id="user" selected="true" /> | ||||
|           <filter-element type="OBJECT" id="role" selected="true" /> | ||||
|           <filter-element type="OBJECT" id="privilege" selected="true" /> | ||||
|           <user-schema> | ||||
|             <filter-element type="OBJECT" id="table" selected="true" /> | ||||
|             <filter-element type="OBJECT" id="view" selected="true" /> | ||||
|             <filter-element type="OBJECT" id="materialized view" selected="true" /> | ||||
|             <filter-element type="OBJECT" id="index" selected="true" /> | ||||
|             <filter-element type="OBJECT" id="constraint" selected="true" /> | ||||
|             <filter-element type="OBJECT" id="trigger" selected="true" /> | ||||
|             <filter-element type="OBJECT" id="synonym" selected="true" /> | ||||
|             <filter-element type="OBJECT" id="sequence" selected="true" /> | ||||
|             <filter-element type="OBJECT" id="procedure" selected="true" /> | ||||
|             <filter-element type="OBJECT" id="function" selected="true" /> | ||||
|             <filter-element type="OBJECT" id="package" selected="true" /> | ||||
|             <filter-element type="OBJECT" id="type" selected="true" /> | ||||
|             <filter-element type="OBJECT" id="dimension" selected="true" /> | ||||
|             <filter-element type="OBJECT" id="cluster" selected="true" /> | ||||
|             <filter-element type="OBJECT" id="dblink" selected="true" /> | ||||
|           </user-schema> | ||||
|           <public-schema> | ||||
|             <filter-element type="OBJECT" id="table" selected="true" /> | ||||
|             <filter-element type="OBJECT" id="view" selected="true" /> | ||||
|             <filter-element type="OBJECT" id="materialized view" selected="true" /> | ||||
|             <filter-element type="OBJECT" id="index" selected="true" /> | ||||
|             <filter-element type="OBJECT" id="constraint" selected="true" /> | ||||
|             <filter-element type="OBJECT" id="trigger" selected="true" /> | ||||
|             <filter-element type="OBJECT" id="synonym" selected="true" /> | ||||
|             <filter-element type="OBJECT" id="sequence" selected="true" /> | ||||
|             <filter-element type="OBJECT" id="procedure" selected="true" /> | ||||
|             <filter-element type="OBJECT" id="function" selected="true" /> | ||||
|             <filter-element type="OBJECT" id="package" selected="true" /> | ||||
|             <filter-element type="OBJECT" id="type" selected="true" /> | ||||
|             <filter-element type="OBJECT" id="dimension" selected="true" /> | ||||
|             <filter-element type="OBJECT" id="cluster" selected="true" /> | ||||
|             <filter-element type="OBJECT" id="dblink" selected="true" /> | ||||
|           </public-schema> | ||||
|           <any-schema> | ||||
|             <filter-element type="OBJECT" id="table" selected="true" /> | ||||
|             <filter-element type="OBJECT" id="view" selected="true" /> | ||||
|             <filter-element type="OBJECT" id="materialized view" selected="true" /> | ||||
|             <filter-element type="OBJECT" id="index" selected="true" /> | ||||
|             <filter-element type="OBJECT" id="constraint" selected="true" /> | ||||
|             <filter-element type="OBJECT" id="trigger" selected="true" /> | ||||
|             <filter-element type="OBJECT" id="synonym" selected="true" /> | ||||
|             <filter-element type="OBJECT" id="sequence" selected="true" /> | ||||
|             <filter-element type="OBJECT" id="procedure" selected="true" /> | ||||
|             <filter-element type="OBJECT" id="function" selected="true" /> | ||||
|             <filter-element type="OBJECT" id="package" selected="true" /> | ||||
|             <filter-element type="OBJECT" id="type" selected="true" /> | ||||
|             <filter-element type="OBJECT" id="dimension" selected="true" /> | ||||
|             <filter-element type="OBJECT" id="cluster" selected="true" /> | ||||
|             <filter-element type="OBJECT" id="dblink" selected="true" /> | ||||
|           </any-schema> | ||||
|         </extended-filter> | ||||
|       </filters> | ||||
|       <sorting enabled="true"> | ||||
|         <sorting-element type="RESERVED_WORD" id="keyword" /> | ||||
|         <sorting-element type="RESERVED_WORD" id="datatype" /> | ||||
|         <sorting-element type="OBJECT" id="column" /> | ||||
|         <sorting-element type="OBJECT" id="table" /> | ||||
|         <sorting-element type="OBJECT" id="view" /> | ||||
|         <sorting-element type="OBJECT" id="materialized view" /> | ||||
|         <sorting-element type="OBJECT" id="index" /> | ||||
|         <sorting-element type="OBJECT" id="constraint" /> | ||||
|         <sorting-element type="OBJECT" id="trigger" /> | ||||
|         <sorting-element type="OBJECT" id="synonym" /> | ||||
|         <sorting-element type="OBJECT" id="sequence" /> | ||||
|         <sorting-element type="OBJECT" id="procedure" /> | ||||
|         <sorting-element type="OBJECT" id="function" /> | ||||
|         <sorting-element type="OBJECT" id="package" /> | ||||
|         <sorting-element type="OBJECT" id="type" /> | ||||
|         <sorting-element type="OBJECT" id="dimension" /> | ||||
|         <sorting-element type="OBJECT" id="cluster" /> | ||||
|         <sorting-element type="OBJECT" id="dblink" /> | ||||
|         <sorting-element type="OBJECT" id="schema" /> | ||||
|         <sorting-element type="OBJECT" id="role" /> | ||||
|         <sorting-element type="OBJECT" id="user" /> | ||||
|         <sorting-element type="RESERVED_WORD" id="function" /> | ||||
|         <sorting-element type="RESERVED_WORD" id="parameter" /> | ||||
|       </sorting> | ||||
|       <format> | ||||
|         <enforce-code-style-case value="true" /> | ||||
|       </format> | ||||
|     </code-completion-settings> | ||||
|     <execution-engine-settings> | ||||
|       <statement-execution> | ||||
|         <fetch-block-size value="100" /> | ||||
|         <execution-timeout value="20" /> | ||||
|         <debug-execution-timeout value="600" /> | ||||
|         <focus-result value="false" /> | ||||
|         <prompt-execution value="false" /> | ||||
|       </statement-execution> | ||||
|       <script-execution> | ||||
|         <command-line-interfaces /> | ||||
|         <execution-timeout value="300" /> | ||||
|       </script-execution> | ||||
|       <method-execution> | ||||
|         <execution-timeout value="30" /> | ||||
|         <debug-execution-timeout value="600" /> | ||||
|         <parameter-history-size value="10" /> | ||||
|       </method-execution> | ||||
|     </execution-engine-settings> | ||||
|     <operation-settings> | ||||
|       <transactions> | ||||
|         <uncommitted-changes> | ||||
|           <on-project-close value="ASK" /> | ||||
|           <on-disconnect value="ASK" /> | ||||
|           <on-autocommit-toggle value="ASK" /> | ||||
|         </uncommitted-changes> | ||||
|         <multiple-uncommitted-changes> | ||||
|           <on-commit value="ASK" /> | ||||
|           <on-rollback value="ASK" /> | ||||
|         </multiple-uncommitted-changes> | ||||
|       </transactions> | ||||
|       <session-browser> | ||||
|         <disconnect-session value="ASK" /> | ||||
|         <kill-session value="ASK" /> | ||||
|         <reload-on-filter-change value="false" /> | ||||
|       </session-browser> | ||||
|       <compiler> | ||||
|         <compile-type value="KEEP" /> | ||||
|         <compile-dependencies value="ASK" /> | ||||
|         <always-show-controls value="false" /> | ||||
|       </compiler> | ||||
|       <debugger> | ||||
|         <debugger-type value="ASK" /> | ||||
|         <use-generic-runners value="true" /> | ||||
|       </debugger> | ||||
|     </operation-settings> | ||||
|     <ddl-file-settings> | ||||
|       <extensions> | ||||
|         <mapping file-type-id="VIEW" extensions="vw" /> | ||||
|         <mapping file-type-id="TRIGGER" extensions="trg" /> | ||||
|         <mapping file-type-id="PROCEDURE" extensions="prc" /> | ||||
|         <mapping file-type-id="FUNCTION" extensions="fnc" /> | ||||
|         <mapping file-type-id="PACKAGE" extensions="pkg" /> | ||||
|         <mapping file-type-id="PACKAGE_SPEC" extensions="pks" /> | ||||
|         <mapping file-type-id="PACKAGE_BODY" extensions="pkb" /> | ||||
|         <mapping file-type-id="TYPE" extensions="tpe" /> | ||||
|         <mapping file-type-id="TYPE_SPEC" extensions="tps" /> | ||||
|         <mapping file-type-id="TYPE_BODY" extensions="tpb" /> | ||||
|       </extensions> | ||||
|       <general> | ||||
|         <lookup-ddl-files value="true" /> | ||||
|         <create-ddl-files value="false" /> | ||||
|         <synchronize-ddl-files value="true" /> | ||||
|         <use-qualified-names value="false" /> | ||||
|         <make-scripts-rerunnable value="true" /> | ||||
|       </general> | ||||
|     </ddl-file-settings> | ||||
|     <general-settings> | ||||
|       <regional-settings> | ||||
|         <date-format value="MEDIUM" /> | ||||
|         <number-format value="UNGROUPED" /> | ||||
|         <locale value="SYSTEM_DEFAULT" /> | ||||
|         <use-custom-formats value="false" /> | ||||
|       </regional-settings> | ||||
|       <environment> | ||||
|         <environment-types> | ||||
|           <environment-type id="development" name="Development" description="Development environment" color="-2430209/-12296320" readonly-code="false" readonly-data="false" /> | ||||
|           <environment-type id="integration" name="Integration" description="Integration environment" color="-2621494/-12163514" readonly-code="true" readonly-data="false" /> | ||||
|           <environment-type id="production" name="Production" description="Productive environment" color="-11574/-10271420" readonly-code="true" readonly-data="true" /> | ||||
|           <environment-type id="other" name="Other" description="" color="-1576/-10724543" readonly-code="false" readonly-data="false" /> | ||||
|         </environment-types> | ||||
|         <visibility-settings> | ||||
|           <connection-tabs value="true" /> | ||||
|           <dialog-headers value="true" /> | ||||
|           <object-editor-tabs value="true" /> | ||||
|           <script-editor-tabs value="false" /> | ||||
|           <execution-result-tabs value="true" /> | ||||
|         </visibility-settings> | ||||
|       </environment> | ||||
|     </general-settings> | ||||
|   </component> | ||||
|   <component name="DBNavigator.Project.StatementExecutionManager"> | ||||
|     <execution-variables /> | ||||
|   </component> | ||||
| </project> | ||||
| @ -1,6 +0,0 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <project version="4"> | ||||
|   <component name="Encoding"> | ||||
|     <file url="PROJECT" charset="UTF-8" /> | ||||
|   </component> | ||||
| </project> | ||||
| @ -1,20 +0,0 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <project version="4"> | ||||
|   <component name="GradleSettings"> | ||||
|     <option name="linkedExternalProjectsSettings"> | ||||
|       <GradleProjectSettings> | ||||
|         <option name="distributionType" value="DEFAULT_WRAPPED" /> | ||||
|         <option name="externalProjectPath" value="$PROJECT_DIR$" /> | ||||
|         <option name="modules"> | ||||
|           <set> | ||||
|             <option value="$PROJECT_DIR$" /> | ||||
|             <option value="$PROJECT_DIR$/app" /> | ||||
|             <option value="$PROJECT_DIR$/app-dialog" /> | ||||
|             <option value="$PROJECT_DIR$/app-updater" /> | ||||
|           </set> | ||||
|         </option> | ||||
|         <option name="resolveModulePerSourceSet" value="false" /> | ||||
|       </GradleProjectSettings> | ||||
|     </option> | ||||
|   </component> | ||||
| </project> | ||||
| @ -1,83 +0,0 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <project version="4"> | ||||
|   <component name="MarkdownProjectSettings" wasCopied="true"> | ||||
|     <PreviewSettings splitEditorLayout="SPLIT" splitEditorPreview="PREVIEW" useGrayscaleRendering="false" zoomFactor="1.0" maxImageWidth="0" showGitHubPageIfSynced="false" allowBrowsingInPreview="false" synchronizePreviewPosition="true" highlightPreviewType="NONE" highlightFadeOut="5" highlightOnTyping="true" synchronizeSourcePosition="true" verticallyAlignSourceAndPreviewSyncPosition="true" showSearchHighlightsInPreview="true" showSelectionInPreview="true" openRemoteLinks="true" replaceUnicodeEmoji="false" lastLayoutSetsDefault="false"> | ||||
|       <PanelProvider> | ||||
|         <provider providerId="com.vladsch.idea.multimarkdown.editor.swing.html.panel" providerName="Default - Swing" /> | ||||
|       </PanelProvider> | ||||
|     </PreviewSettings> | ||||
|     <ParserSettings gitHubSyntaxChange="false" emojiShortcuts="0" emojiImages="0"> | ||||
|       <PegdownExtensions> | ||||
|         <option name="ABBREVIATIONS" value="false" /> | ||||
|         <option name="ANCHORLINKS" value="true" /> | ||||
|         <option name="ASIDE" value="false" /> | ||||
|         <option name="ATXHEADERSPACE" value="true" /> | ||||
|         <option name="AUTOLINKS" value="true" /> | ||||
|         <option name="DEFINITIONS" value="false" /> | ||||
|         <option name="DEFINITION_BREAK_DOUBLE_BLANK_LINE" value="false" /> | ||||
|         <option name="FENCED_CODE_BLOCKS" value="true" /> | ||||
|         <option name="FOOTNOTES" value="false" /> | ||||
|         <option name="HARDWRAPS" value="false" /> | ||||
|         <option name="HTML_DEEP_PARSER" value="false" /> | ||||
|         <option name="INSERTED" value="false" /> | ||||
|         <option name="QUOTES" value="false" /> | ||||
|         <option name="RELAXEDHRULES" value="true" /> | ||||
|         <option name="SMARTS" value="false" /> | ||||
|         <option name="STRIKETHROUGH" value="true" /> | ||||
|         <option name="SUBSCRIPT" value="false" /> | ||||
|         <option name="SUPERSCRIPT" value="false" /> | ||||
|         <option name="SUPPRESS_HTML_BLOCKS" value="false" /> | ||||
|         <option name="SUPPRESS_INLINE_HTML" value="false" /> | ||||
|         <option name="TABLES" value="true" /> | ||||
|         <option name="TASKLISTITEMS" value="true" /> | ||||
|         <option name="TOC" value="false" /> | ||||
|         <option name="WIKILINKS" value="true" /> | ||||
|       </PegdownExtensions> | ||||
|       <ParserOptions> | ||||
|         <option name="ADMONITION_EXT" value="false" /> | ||||
|         <option name="ATTRIBUTES_EXT" value="false" /> | ||||
|         <option name="COMMONMARK_LISTS" value="false" /> | ||||
|         <option name="DUMMY" value="false" /> | ||||
|         <option name="EMOJI_SHORTCUTS" value="true" /> | ||||
|         <option name="ENUMERATED_REFERENCES_EXT" value="false" /> | ||||
|         <option name="FLEXMARK_FRONT_MATTER" value="false" /> | ||||
|         <option name="GFM_LOOSE_BLANK_LINE_AFTER_ITEM_PARA" value="true" /> | ||||
|         <option name="GFM_TABLE_RENDERING" value="true" /> | ||||
|         <option name="GITBOOK_URL_ENCODING" value="false" /> | ||||
|         <option name="GITHUB_LISTS" value="true" /> | ||||
|         <option name="GITHUB_WIKI_LINKS" value="true" /> | ||||
|         <option name="GITLAB_EXT" value="false" /> | ||||
|         <option name="GITLAB_MATH_EXT" value="false" /> | ||||
|         <option name="GITLAB_MERMAID_EXT" value="false" /> | ||||
|         <option name="HEADER_ID_NON_ASCII_TO_LOWERCASE" value="false" /> | ||||
|         <option name="HEADER_ID_NO_DUPED_DASHES" value="false" /> | ||||
|         <option name="JEKYLL_FRONT_MATTER" value="false" /> | ||||
|         <option name="MACROS_EXT" value="false" /> | ||||
|         <option name="NO_TEXT_ATTRIBUTES" value="false" /> | ||||
|         <option name="PARSE_HTML_ANCHOR_ID" value="false" /> | ||||
|         <option name="SIM_TOC_BLANK_LINE_SPACER" value="true" /> | ||||
|       </ParserOptions> | ||||
|     </ParserSettings> | ||||
|     <HtmlSettings headerTopEnabled="false" headerBottomEnabled="false" bodyTopEnabled="false" bodyBottomEnabled="false" embedUrlContent="false" addPageHeader="true" embedImages="false" embedHttpImages="false" imageUriSerials="false" addDocTypeHtml="true" noParaTags="false"> | ||||
|       <GeneratorProvider> | ||||
|         <provider providerId="com.vladsch.idea.multimarkdown.editor.swing.html.generator" providerName="Default Swing HTML Generator" /> | ||||
|       </GeneratorProvider> | ||||
|       <headerTop /> | ||||
|       <headerBottom /> | ||||
|       <bodyTop /> | ||||
|       <bodyBottom /> | ||||
|     </HtmlSettings> | ||||
|     <CssSettings previewScheme="UI_SCHEME" cssUri="" isCssUriEnabled="false" isCssUriSerial="false" isCssTextEnabled="false" isDynamicPageWidth="true"> | ||||
|       <StylesheetProvider> | ||||
|         <provider providerId="com.vladsch.idea.multimarkdown.editor.swing.html.css" providerName="Default Swing Stylesheet" /> | ||||
|       </StylesheetProvider> | ||||
|       <ScriptProviders /> | ||||
|       <cssText /> | ||||
|       <cssUriHistory /> | ||||
|     </CssSettings> | ||||
|     <HtmlExportSettings updateOnSave="false" parentDir="$ProjectFileDir$" targetDir="$ProjectFileDir$" cssDir="" scriptDir="" plainHtml="false" imageDir="" copyLinkedImages="false" imageUniquifyType="0" targetPathType="2" targetExt="" useTargetExt="false" noCssNoScripts="false" useElementStyleAttribute="false" linkToExportedHtml="true" exportOnSettingsChange="true" regenerateOnProjectOpen="false" linkFormatType="HTTP_ABSOLUTE" /> | ||||
|     <LinkMapSettings> | ||||
|       <textMaps /> | ||||
|     </LinkMapSettings> | ||||
|   </component> | ||||
| </project> | ||||
| @ -1,3 +0,0 @@ | ||||
| <component name="MarkdownNavigator.ProfileManager"> | ||||
|   <settings default="" pdf-export="" plain-text-search-scope="Project Files" /> | ||||
| </component> | ||||
| @ -1,38 +0,0 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <project version="4"> | ||||
|   <component name="NullableNotNullManager"> | ||||
|     <option name="myDefaultNullable" value="android.support.annotation.Nullable" /> | ||||
|     <option name="myDefaultNotNull" value="android.support.annotation.NonNull" /> | ||||
|     <option name="myNullables"> | ||||
|       <value> | ||||
|         <list size="7"> | ||||
|           <item index="0" class="java.lang.String" itemvalue="org.jetbrains.annotations.Nullable" /> | ||||
|           <item index="1" class="java.lang.String" itemvalue="javax.annotation.Nullable" /> | ||||
|           <item index="2" class="java.lang.String" itemvalue="javax.annotation.CheckForNull" /> | ||||
|           <item index="3" class="java.lang.String" itemvalue="edu.umd.cs.findbugs.annotations.Nullable" /> | ||||
|           <item index="4" class="java.lang.String" itemvalue="android.support.annotation.Nullable" /> | ||||
|           <item index="5" class="java.lang.String" itemvalue="androidx.annotation.Nullable" /> | ||||
|           <item index="6" class="java.lang.String" itemvalue="androidx.annotation.RecentlyNullable" /> | ||||
|         </list> | ||||
|       </value> | ||||
|     </option> | ||||
|     <option name="myNotNulls"> | ||||
|       <value> | ||||
|         <list size="6"> | ||||
|           <item index="0" class="java.lang.String" itemvalue="org.jetbrains.annotations.NotNull" /> | ||||
|           <item index="1" class="java.lang.String" itemvalue="javax.annotation.Nonnull" /> | ||||
|           <item index="2" class="java.lang.String" itemvalue="edu.umd.cs.findbugs.annotations.NonNull" /> | ||||
|           <item index="3" class="java.lang.String" itemvalue="android.support.annotation.NonNull" /> | ||||
|           <item index="4" class="java.lang.String" itemvalue="androidx.annotation.NonNull" /> | ||||
|           <item index="5" class="java.lang.String" itemvalue="androidx.annotation.RecentlyNonNull" /> | ||||
|         </list> | ||||
|       </value> | ||||
|     </option> | ||||
|   </component> | ||||
|   <component name="ProjectRootManager" version="2" languageLevel="JDK_1_7" project-jdk-name="1.8" project-jdk-type="JavaSDK"> | ||||
|     <output url="file://$PROJECT_DIR$/build/classes" /> | ||||
|   </component> | ||||
|   <component name="ProjectType"> | ||||
|     <option name="id" value="Android" /> | ||||
|   </component> | ||||
| </project> | ||||
| @ -1,12 +0,0 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <project version="4"> | ||||
|   <component name="RunConfigurationProducerService"> | ||||
|     <option name="ignoredProducers"> | ||||
|       <set> | ||||
|         <option value="org.jetbrains.plugins.gradle.execution.test.runner.AllInPackageGradleConfigurationProducer" /> | ||||
|         <option value="org.jetbrains.plugins.gradle.execution.test.runner.TestClassGradleConfigurationProducer" /> | ||||
|         <option value="org.jetbrains.plugins.gradle.execution.test.runner.TestMethodGradleConfigurationProducer" /> | ||||
|       </set> | ||||
|     </option> | ||||
|   </component> | ||||
| </project> | ||||
| @ -1,6 +0,0 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <project version="4"> | ||||
|   <component name="VcsDirectoryMappings"> | ||||
|     <mapping directory="" vcs="Git" /> | ||||
|   </component> | ||||
| </project> | ||||
| @ -0,0 +1,3 @@ | ||||
| POM_NAME=App Dialog | ||||
| POM_ARTIFACT_ID=app-dialog | ||||
| POM_PACKAGING=aar | ||||
| @ -0,0 +1,251 @@ | ||||
| package com.king.app.dialog; | ||||
| 
 | ||||
| import android.content.Context; | ||||
| import android.support.annotation.IdRes; | ||||
| import android.support.annotation.LayoutRes; | ||||
| import android.support.annotation.NonNull; | ||||
| import android.support.annotation.StringRes; | ||||
| import android.support.annotation.StyleRes; | ||||
| import android.view.View; | ||||
| 
 | ||||
| /** | ||||
|  * @author Jenly <a href="mailto:jenly1314@gmail.com">Jenly</a> | ||||
|  */ | ||||
| public class BaseDialogConfig { | ||||
| 
 | ||||
|     /** | ||||
|      * 布局ID | ||||
|      */ | ||||
|     @LayoutRes int layoutId; | ||||
|     /** | ||||
|      * 标题视图ID | ||||
|      */ | ||||
|     @IdRes int titleId = R.id.tvDialogTitle; | ||||
|     /** | ||||
|      * 内容视图ID | ||||
|      */ | ||||
|     @IdRes int contentId = R.id.tvDialogContent; | ||||
|     /** | ||||
|      * 取消视图ID(左边按钮) | ||||
|      */ | ||||
|     @IdRes int cancelId = R.id.btnDialogCancel; | ||||
|     /** | ||||
|      * 确定视图ID(右边按钮) | ||||
|      */ | ||||
|     @IdRes int okId = R.id.btnDialogOK; | ||||
|     /** | ||||
|      * 按钮中间分割线ID | ||||
|      */ | ||||
|     @IdRes int lineId = R.id.line; | ||||
| 
 | ||||
|     /** | ||||
|      * 样式ID | ||||
|      */ | ||||
|     @StyleRes int styleId = R.style.app_dialog; | ||||
| 
 | ||||
|     /** | ||||
|      * 标题文本 | ||||
|      */ | ||||
|     CharSequence title; | ||||
|     /** | ||||
|      * 内容文本 | ||||
|      */ | ||||
|     CharSequence content; | ||||
|     /** | ||||
|      * 取消按钮文本 | ||||
|      */ | ||||
|     CharSequence cancel; | ||||
|     /** | ||||
|      * 确定按钮文本 | ||||
|      */ | ||||
|     CharSequence ok; | ||||
|     /** | ||||
|      * 是否隐藏取消按钮,如果隐藏取消则底部只显示一个按钮 | ||||
|      */ | ||||
|     boolean isHideCancel; | ||||
|     /** | ||||
|      * 是否隐藏标题 | ||||
|      */ | ||||
|     boolean isHideTitle; | ||||
| 
 | ||||
|     View.OnClickListener onClickCancel; | ||||
| 
 | ||||
|     View.OnClickListener onClickOk; | ||||
| 
 | ||||
|     public BaseDialogConfig(){ | ||||
|         this(R.layout.app_dialog); | ||||
|     } | ||||
| 
 | ||||
|     public BaseDialogConfig(@LayoutRes int layoutId){ | ||||
|         this.layoutId = layoutId; | ||||
|     } | ||||
| 
 | ||||
| 
 | ||||
|     public @LayoutRes int getLayoutId() { | ||||
|         return layoutId; | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * @param layoutId | ||||
|      * @return | ||||
|      * @deprecated 即将废弃,下一个版本可能会移除此方法 | ||||
|      */ | ||||
|     @Deprecated | ||||
|     public BaseDialogConfig setLayoutId(@IdRes int layoutId) { | ||||
|         this.layoutId = layoutId; | ||||
|         return this; | ||||
|     } | ||||
| 
 | ||||
|     public int getTitleId() { | ||||
|         return titleId; | ||||
|     } | ||||
| 
 | ||||
|     public BaseDialogConfig setTitleId(@IdRes int titleId) { | ||||
|         this.titleId = titleId; | ||||
|         return this; | ||||
|     } | ||||
| 
 | ||||
|     public int getStyleId() { | ||||
|         return styleId; | ||||
|     } | ||||
| 
 | ||||
|     public BaseDialogConfig setStyleId(@IdRes int styleId) { | ||||
|         this.styleId = styleId; | ||||
|         return this; | ||||
|     } | ||||
| 
 | ||||
|     public @IdRes int getContentId() { | ||||
|         return contentId; | ||||
|     } | ||||
| 
 | ||||
|     public BaseDialogConfig setContentId(@IdRes int contentId) { | ||||
|         this.contentId = contentId; | ||||
|         return this; | ||||
|     } | ||||
| 
 | ||||
|     public @IdRes int getCancelId() { | ||||
|         return cancelId; | ||||
|     } | ||||
| 
 | ||||
|     public BaseDialogConfig setCancelId(@IdRes int cancelId) { | ||||
|         this.cancelId = cancelId; | ||||
|         return this; | ||||
|     } | ||||
| 
 | ||||
|     public @IdRes int getOkId() { | ||||
|         return okId; | ||||
|     } | ||||
| 
 | ||||
|     public BaseDialogConfig setOkId(@IdRes int okId) { | ||||
|         this.okId = okId; | ||||
|         return this; | ||||
|     } | ||||
| 
 | ||||
|     public @IdRes int getLineId() { | ||||
|         return lineId; | ||||
|     } | ||||
| 
 | ||||
|     public BaseDialogConfig setLineId(@IdRes int lineId) { | ||||
|         this.lineId = lineId; | ||||
|         return this; | ||||
|     } | ||||
| 
 | ||||
|     public CharSequence getTitle() { | ||||
|         return title; | ||||
|     } | ||||
| 
 | ||||
|     public BaseDialogConfig setTitle(CharSequence title) { | ||||
|         this.title = title; | ||||
|         return this; | ||||
|     } | ||||
| 
 | ||||
|     public BaseDialogConfig setTitle(@NonNull Context context, @StringRes int resId) { | ||||
|         this.title = context.getString(resId); | ||||
|         return this; | ||||
|     } | ||||
| 
 | ||||
|     public CharSequence getContent() { | ||||
|         return content; | ||||
|     } | ||||
| 
 | ||||
|     public BaseDialogConfig setContent(CharSequence content) { | ||||
|         this.content = content; | ||||
|         return this; | ||||
|     } | ||||
| 
 | ||||
|     public CharSequence getCancel() { | ||||
|         return cancel; | ||||
|     } | ||||
| 
 | ||||
|     public BaseDialogConfig setCancel(CharSequence cancel) { | ||||
|         this.cancel = cancel; | ||||
|         return this; | ||||
|     } | ||||
| 
 | ||||
|     public BaseDialogConfig setCancel(@NonNull Context context, @StringRes int resId) { | ||||
|         this.cancel = context.getString(resId); | ||||
|         return this; | ||||
|     } | ||||
| 
 | ||||
|     public CharSequence getOk() { | ||||
|         return ok; | ||||
|     } | ||||
| 
 | ||||
|     public BaseDialogConfig setOk(CharSequence ok) { | ||||
|         this.ok = ok; | ||||
|         return this; | ||||
|     } | ||||
| 
 | ||||
|     public BaseDialogConfig setOk(@NonNull Context context, @StringRes int resId) { | ||||
|         this.ok = context.getString(resId); | ||||
|         return this; | ||||
|     } | ||||
| 
 | ||||
|     public boolean isHideCancel() { | ||||
|         return isHideCancel; | ||||
|     } | ||||
| 
 | ||||
|     public BaseDialogConfig setHideCancel(boolean hideCancel) { | ||||
|         isHideCancel = hideCancel; | ||||
|         return this; | ||||
|     } | ||||
| 
 | ||||
|     public boolean isHideTitle(){ | ||||
|         return isHideTitle; | ||||
|     } | ||||
| 
 | ||||
|     public BaseDialogConfig setHideTitle(boolean hideTitle){ | ||||
|         isHideTitle = hideTitle; | ||||
|         return this; | ||||
|     } | ||||
| 
 | ||||
|     public View.OnClickListener getOnClickCancel() { | ||||
|         return onClickCancel; | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * 设置“取消”按钮点击监听,不设置默认点击关闭弹框 | ||||
|      * @param onClickCancel | ||||
|      * @return | ||||
|      */ | ||||
|     public BaseDialogConfig setOnClickCancel(View.OnClickListener onClickCancel) { | ||||
|         this.onClickCancel = onClickCancel; | ||||
|         return this; | ||||
|     } | ||||
| 
 | ||||
|     public View.OnClickListener getOnClickOk() { | ||||
|         return onClickOk; | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * 设置“确定”按钮点击监听,不设置默认点击关闭弹框 | ||||
|      * @param onClickOk | ||||
|      * @return | ||||
|      */ | ||||
|     public BaseDialogConfig setOnClickOk(View.OnClickListener onClickOk) { | ||||
|         this.onClickOk = onClickOk; | ||||
|         return this; | ||||
|     } | ||||
| 
 | ||||
| 
 | ||||
| } | ||||
| @ -0,0 +1,3 @@ | ||||
| POM_NAME=App Updater | ||||
| POM_ARTIFACT_ID=app-updater | ||||
| POM_PACKAGING=aar | ||||
| @ -0,0 +1,231 @@ | ||||
| package com.king.app.updater.http; | ||||
| 
 | ||||
| import android.os.AsyncTask; | ||||
| import android.support.annotation.NonNull; | ||||
| import android.support.annotation.Nullable; | ||||
| import android.util.Log; | ||||
| 
 | ||||
| import com.king.app.updater.constant.Constants; | ||||
| import com.king.app.updater.util.SSLSocketFactoryUtils; | ||||
| 
 | ||||
| import org.apache.http.conn.ssl.SSLSocketFactory; | ||||
| 
 | ||||
| import java.io.File; | ||||
| import java.io.FileOutputStream; | ||||
| import java.io.InputStream; | ||||
| import java.net.ConnectException; | ||||
| import java.util.Map; | ||||
| import java.util.concurrent.TimeUnit; | ||||
| 
 | ||||
| import okhttp3.Call; | ||||
| import okhttp3.OkHttpClient; | ||||
| import okhttp3.Request; | ||||
| import okhttp3.Response; | ||||
| 
 | ||||
| /** | ||||
|  * OkHttpManager使用{@link OkHttpClient}实现{@link IHttpManager} | ||||
|  * 使用OkHttpManager时必须依赖OkHttp库 | ||||
|  * @author <a href="mailto:jenly1314@gmail.com">Jenly</a> | ||||
|  */ | ||||
| public class OkHttpManager implements IHttpManager { | ||||
| 
 | ||||
|     private static final int DEFAULT_TIME_OUT = 20000; | ||||
| 
 | ||||
|     private OkHttpClient okHttpClient; | ||||
| 
 | ||||
|     private boolean isCancel; | ||||
| 
 | ||||
|     private static volatile OkHttpManager INSTANCE; | ||||
| 
 | ||||
|     public static OkHttpManager getInstance(){ | ||||
|         if(INSTANCE == null){ | ||||
|             synchronized (HttpManager.class){ | ||||
|                 if(INSTANCE == null){ | ||||
|                     INSTANCE = new OkHttpManager(); | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         return INSTANCE; | ||||
|     } | ||||
| 
 | ||||
|     private OkHttpManager(){ | ||||
|         this(DEFAULT_TIME_OUT); | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * HttpManager对外暴露。如果没有特殊需求,推荐使用{@link HttpManager#getInstance()} | ||||
|      * @param timeout 超时时间,单位:毫秒 | ||||
|      */ | ||||
|     public OkHttpManager(int timeout){ | ||||
|         this(new OkHttpClient.Builder() | ||||
|                 .readTimeout(timeout, TimeUnit.MILLISECONDS) | ||||
|                 .connectTimeout(timeout, TimeUnit.MILLISECONDS) | ||||
|                 .sslSocketFactory(SSLSocketFactoryUtils.createSSLSocketFactory(),SSLSocketFactoryUtils.createTrustAllManager()) | ||||
|                 .hostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER) | ||||
|                 .build()); | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * HttpManager对外暴露,推荐使用{@link HttpManager#getInstance()} | ||||
|      * @param okHttpClient {@link OkHttpClient} | ||||
|      */ | ||||
|     public OkHttpManager(@NonNull OkHttpClient okHttpClient){ | ||||
|         this.okHttpClient = okHttpClient; | ||||
|     } | ||||
| 
 | ||||
| 
 | ||||
|     @Override | ||||
|     public void download(String url,final String path,final String filename, @Nullable Map<String, String> requestProperty,final DownloadCallback callback) { | ||||
|         isCancel = false; | ||||
|         new DownloadTask(okHttpClient,url,path,filename,requestProperty,callback).execute(); | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public void cancel() { | ||||
|         isCancel = true; | ||||
|     } | ||||
| 
 | ||||
| 
 | ||||
|     /** | ||||
|      * 异步下载任务 | ||||
|      */ | ||||
|     private class DownloadTask extends AsyncTask<Void,Long,File> { | ||||
|         private String url; | ||||
| 
 | ||||
|         private String path; | ||||
| 
 | ||||
|         private String filename; | ||||
| 
 | ||||
|         private Map<String,String> requestProperty; | ||||
| 
 | ||||
|         private DownloadCallback callback; | ||||
| 
 | ||||
|         private Exception exception; | ||||
| 
 | ||||
|         private OkHttpClient okHttpClient; | ||||
| 
 | ||||
|         public DownloadTask(OkHttpClient okHttpClient,String url, String path, String filename ,@Nullable Map<String,String> requestProperty, DownloadCallback callback){ | ||||
|             this.okHttpClient = okHttpClient; | ||||
|             this.url = url; | ||||
|             this.path = path; | ||||
|             this.filename = filename; | ||||
|             this.callback = callback; | ||||
|             this.requestProperty = requestProperty; | ||||
| 
 | ||||
|         } | ||||
| 
 | ||||
|         @Override | ||||
|         protected File doInBackground(Void... voids) { | ||||
| 
 | ||||
|             try{ | ||||
|                 Request.Builder builder = new Request.Builder() | ||||
|                         .url(url) | ||||
|                         .addHeader("Accept-Encoding", "identity") | ||||
|                         .get(); | ||||
| 
 | ||||
|                 if(requestProperty!=null){ | ||||
|                     for(Map.Entry<String,String> entry : requestProperty.entrySet()){ | ||||
|                         builder.addHeader(entry.getKey(),entry.getValue()); | ||||
|                     } | ||||
|                 } | ||||
| 
 | ||||
|                 Call call = okHttpClient.newCall(builder.build()); | ||||
|                 Response response = call.execute(); | ||||
| 
 | ||||
|                 if(response.isSuccessful()){ | ||||
|                     InputStream is = response.body().byteStream(); | ||||
| 
 | ||||
|                     long length = response.body().contentLength(); | ||||
| 
 | ||||
|                     Log.d(Constants.TAG,"contentLength:" + length); | ||||
| 
 | ||||
|                     long progress = 0; | ||||
| 
 | ||||
|                     byte[] buffer = new byte[8192]; | ||||
| 
 | ||||
|                     int len; | ||||
|                     File file = new File(path,filename); | ||||
|                     FileOutputStream fos = new FileOutputStream(file); | ||||
|                     while ((len = is.read(buffer)) != -1){ | ||||
|                         if(isCancel){ | ||||
|                             if(call != null){ | ||||
|                                 call.cancel(); | ||||
|                             } | ||||
|                             cancel(true); | ||||
|                             break; | ||||
|                         } | ||||
|                         fos.write(buffer,0,len); | ||||
|                         progress += len; | ||||
|                         //更新进度
 | ||||
|                         if(length > 0){ | ||||
|                             publishProgress(progress,length); | ||||
|                         } | ||||
|                     } | ||||
| 
 | ||||
|                     fos.flush(); | ||||
|                     fos.close(); | ||||
|                     is.close(); | ||||
| 
 | ||||
|                     response.close(); | ||||
| 
 | ||||
|                     if(progress <= 0 && length <= 0){ | ||||
|                         throw new IllegalStateException(String.format("contentLength = %d",length)); | ||||
|                     } | ||||
| 
 | ||||
|                     return file; | ||||
| 
 | ||||
|                 }else {//连接失败
 | ||||
|                     throw new ConnectException(String.format("responseCode = %d",response.code())); | ||||
|                 } | ||||
| 
 | ||||
|             }catch (Exception e){ | ||||
|                 this.exception = e; | ||||
|                 e.printStackTrace(); | ||||
|             } | ||||
| 
 | ||||
|             return null; | ||||
|         } | ||||
| 
 | ||||
|         @Override | ||||
|         protected void onPreExecute() { | ||||
|             super.onPreExecute(); | ||||
|             if(callback != null){ | ||||
|                 callback.onStart(url); | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         @Override | ||||
|         protected void onPostExecute(File file) { | ||||
|             super.onPostExecute(file); | ||||
|             if(callback != null){ | ||||
|                 if(file != null){ | ||||
|                     callback.onFinish(file); | ||||
|                 }else{ | ||||
|                     callback.onError(exception); | ||||
|                 } | ||||
| 
 | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         @Override | ||||
|         protected void onProgressUpdate(Long... values) { | ||||
|             super.onProgressUpdate(values); | ||||
|             if(callback != null){ | ||||
|                 if(!isCancelled()){ | ||||
|                     callback.onProgress(values[0],values[1]); | ||||
|                 } | ||||
| 
 | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         @Override | ||||
|         protected void onCancelled() { | ||||
|             super.onCancelled(); | ||||
|             if(callback != null){ | ||||
|                 callback.onCancel(); | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,222 @@ | ||||
| package com.king.app.updater.util; | ||||
| 
 | ||||
| import android.app.Notification; | ||||
| import android.app.NotificationChannel; | ||||
| import android.app.NotificationManager; | ||||
| import android.app.PendingIntent; | ||||
| import android.content.Context; | ||||
| import android.content.Intent; | ||||
| import android.os.Build; | ||||
| import android.support.annotation.DrawableRes; | ||||
| import android.support.annotation.RequiresApi; | ||||
| import android.support.v4.app.NotificationCompat; | ||||
| 
 | ||||
| import com.king.app.updater.UpdateConfig; | ||||
| import com.king.app.updater.constant.Constants; | ||||
| import com.king.app.updater.service.DownloadService; | ||||
| 
 | ||||
| import java.io.File; | ||||
| 
 | ||||
| /** | ||||
|  * @author <a href="mailto:jenly1314@gmail.com">Jenly</a> | ||||
|  */ | ||||
| public class NotificationUtils { | ||||
| 
 | ||||
|     private NotificationUtils(){ | ||||
|         throw new AssertionError(); | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * 显示开始下载是的通知 | ||||
|      * @param notifyId | ||||
|      * @param channelId | ||||
|      * @param channelName | ||||
|      * @param icon | ||||
|      * @param title | ||||
|      * @param content | ||||
|      */ | ||||
|     public static void showStartNotification(Context context, int notifyId,String channelId, String channelName,@DrawableRes int icon,CharSequence title,CharSequence content,boolean isVibrate,boolean isSound){ | ||||
|         if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){ | ||||
|             createNotificationChannel(context,channelId,channelName,isVibrate,isSound); | ||||
|         } | ||||
|         NotificationCompat.Builder builder = buildNotification(context,channelId,icon,title,content); | ||||
|         builder.setPriority(NotificationManager.IMPORTANCE_HIGH); | ||||
|         if(isVibrate && isSound){ | ||||
|             builder.setDefaults(Notification.DEFAULT_VIBRATE | Notification.DEFAULT_SOUND); | ||||
|         }else if(isVibrate){ | ||||
|             builder.setDefaults(Notification.DEFAULT_VIBRATE); | ||||
|         }else if(isSound){ | ||||
|             builder.setDefaults(Notification.DEFAULT_SOUND); | ||||
|         } | ||||
| 
 | ||||
|         Notification notification = builder.build(); | ||||
|         notification.flags = Notification.FLAG_NO_CLEAR | Notification.FLAG_ONLY_ALERT_ONCE; | ||||
|         notifyNotification(context,notifyId,notification); | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * 显示下载中的通知(更新进度) | ||||
|      * @param notifyId | ||||
|      * @param channelId | ||||
|      * @param icon | ||||
|      * @param title | ||||
|      * @param content | ||||
|      * @param progress | ||||
|      * @param size | ||||
|      */ | ||||
|     public static void showProgressNotification(Context context, int notifyId,String channelId,@DrawableRes int icon,CharSequence title,CharSequence content,int progress,int size){ | ||||
|         NotificationCompat.Builder builder = buildNotification(context,channelId,icon,title,content,progress,size); | ||||
| 
 | ||||
|         Notification notification = builder.build(); | ||||
|         notification.flags = Notification.FLAG_NO_CLEAR | Notification.FLAG_ONLY_ALERT_ONCE; | ||||
|         notifyNotification(context,notifyId,notification); | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * 显示下载完成时的通知(点击安装) | ||||
|      * @param notifyId | ||||
|      * @param channelId | ||||
|      * @param icon | ||||
|      * @param title | ||||
|      * @param content | ||||
|      * @param file | ||||
|      */ | ||||
|     public static void showFinishNotification(Context context, int notifyId, String channelId, @DrawableRes int icon, CharSequence title, CharSequence content, File file, String authority){ | ||||
|         cancelNotification(context,notifyId); | ||||
|         NotificationCompat.Builder builder = buildNotification(context,channelId,icon,title,content); | ||||
|         builder.setAutoCancel(true); | ||||
|         Intent intent = AppUtils.getInstallIntent(context,file,authority); | ||||
|         PendingIntent clickIntent = PendingIntent.getActivity(context, notifyId,intent, PendingIntent.FLAG_UPDATE_CURRENT); | ||||
|         builder.setContentIntent(clickIntent); | ||||
|         Notification notification = builder.build(); | ||||
|         notification.flags = Notification.FLAG_AUTO_CANCEL; | ||||
|         notifyNotification(context,notifyId,notification); | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * 现在下载失败通知 | ||||
|      * @param context | ||||
|      * @param notifyId | ||||
|      * @param channelId | ||||
|      * @param icon | ||||
|      * @param title | ||||
|      * @param content | ||||
|      * @param isReDownload | ||||
|      * @param config | ||||
|      */ | ||||
|     public static void showErrorNotification(Context context, int notifyId, String channelId, @DrawableRes int icon, CharSequence title, CharSequence content, boolean isReDownload, UpdateConfig config){ | ||||
|         NotificationCompat.Builder builder = buildNotification(context,channelId,icon,title,content); | ||||
|         builder.setAutoCancel(true); | ||||
|         if(isReDownload){//重新下载
 | ||||
|             Intent intent  = new Intent(context, DownloadService.class); | ||||
|             intent.putExtra(Constants.KEY_RE_DOWNLOAD,true); | ||||
|             intent.putExtra(Constants.KEY_UPDATE_CONFIG,config); | ||||
|             PendingIntent clickIntent = PendingIntent.getService(context, notifyId,intent, PendingIntent.FLAG_UPDATE_CURRENT); | ||||
|             builder.setContentIntent(clickIntent); | ||||
|         }else{ | ||||
|             PendingIntent clickIntent = PendingIntent.getService(context, notifyId,new Intent(), PendingIntent.FLAG_UPDATE_CURRENT); | ||||
|             builder.setContentIntent(clickIntent); | ||||
|         } | ||||
| 
 | ||||
|         Notification notification = builder.build(); | ||||
|         notification.flags = Notification.FLAG_AUTO_CANCEL; | ||||
|         notifyNotification(context,notifyId,notification); | ||||
|     } | ||||
| 
 | ||||
| 
 | ||||
|     /** | ||||
|      * 显示通知信息(非第一次) | ||||
|      * @param notifyId | ||||
|      * @param channelId | ||||
|      * @param icon | ||||
|      * @param title | ||||
|      * @param content | ||||
|      */ | ||||
|     public static void showNotification(Context context, int notifyId,String channelId,@DrawableRes int icon,CharSequence title,CharSequence content,boolean isAutoCancel){ | ||||
|         NotificationCompat.Builder builder = buildNotification(context,channelId,icon,title,content); | ||||
|         builder.setAutoCancel(isAutoCancel); | ||||
|         Notification notification = builder.build(); | ||||
|         notification.flags = Notification.FLAG_AUTO_CANCEL; | ||||
|         notifyNotification(context,notifyId,notification); | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * 取消通知 | ||||
|      * @param notifyId | ||||
|      */ | ||||
|     public static void cancelNotification(Context context, int notifyId){ | ||||
|         getNotificationManager(context).cancel(notifyId); | ||||
|     } | ||||
| 
 | ||||
| 
 | ||||
|     /** | ||||
|      * 获取通知管理器 | ||||
|      * @return | ||||
|      */ | ||||
|     public static NotificationManager getNotificationManager(Context context){ | ||||
|         return (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE); | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * 创建一个通知渠道(兼容0以上版本) | ||||
|      * @param channelId | ||||
|      * @param channelName | ||||
|      */ | ||||
|     @RequiresApi(api = Build.VERSION_CODES.O) | ||||
|     public static void createNotificationChannel(Context context, String channelId, String channelName,boolean isVibrate,boolean isSound){ | ||||
|         NotificationChannel channel = new NotificationChannel(channelId,channelName, NotificationManager.IMPORTANCE_HIGH); | ||||
|         channel.enableVibration(isVibrate); | ||||
|         if(!isSound){ | ||||
|             channel.setSound(null,null); | ||||
|         } | ||||
|         getNotificationManager(context).createNotificationChannel(channel); | ||||
| 
 | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * 构建一个通知构建器 | ||||
|      * @param channelId | ||||
|      * @param icon | ||||
|      * @param title | ||||
|      * @param content | ||||
|      * @return | ||||
|      */ | ||||
|     private static NotificationCompat.Builder buildNotification(Context context, String channelId, @DrawableRes int icon,CharSequence title,CharSequence content){ | ||||
|         return buildNotification(context,channelId,icon,title,content,Constants.NONE,Constants.NONE); | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * 构建一个通知构建器 | ||||
|      * @param channelId | ||||
|      * @param icon | ||||
|      * @param title | ||||
|      * @param content | ||||
|      * @param progress | ||||
|      * @param size | ||||
|      * @return | ||||
|      */ | ||||
|     private static NotificationCompat.Builder buildNotification(Context context, String channelId, @DrawableRes int icon, CharSequence title, CharSequence content, int progress, int size){ | ||||
|         NotificationCompat.Builder builder = new NotificationCompat.Builder(context,channelId); | ||||
|         builder.setSmallIcon(icon); | ||||
| 
 | ||||
|         builder.setContentTitle(title); | ||||
|         builder.setContentText(content); | ||||
|         builder.setOngoing(true); | ||||
| 
 | ||||
|         if(progress!= Constants.NONE && size!=Constants.NONE){ | ||||
|             builder.setProgress(size,progress,false); | ||||
|         } | ||||
| 
 | ||||
|         return builder; | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * 更新通知栏 | ||||
|      * @param id | ||||
|      * @param notification | ||||
|      */ | ||||
|     private static void notifyNotification(Context context, int id, Notification notification){ | ||||
|         getNotificationManager(context).notify(id,notification); | ||||
|     } | ||||
| 
 | ||||
| } | ||||
									
										Binary file not shown.
									
								
							
						| @ -1 +1 @@ | ||||
| [{"outputType":{"type":"APK"},"apkInfo":{"type":"MAIN","splits":[],"versionCode":5,"versionName":"1.0.4","enabled":true,"outputFile":"app-release.apk","fullName":"release","baseName":"release"},"path":"app-release.apk","properties":{}}] | ||||
| [{"outputType":{"type":"APK"},"apkInfo":{"type":"MAIN","splits":[],"versionCode":17,"versionName":"1.0.10","enabled":true,"outputFile":"app-release.apk","fullName":"release","baseName":"release"},"path":"app-release.apk","properties":{}}] | ||||
					Loading…
					
					
				
		Reference in new issue