├── .gitignore
├── .idea
├── .name
├── compiler.xml
├── copyright
│ └── profiles_settings.xml
├── encodings.xml
├── gradle.xml
├── misc.xml
├── modules.xml
└── runConfigurations.xml
├── LICENSE
├── README.md
├── bintray.gradle
├── build.gradle
├── gradle.properties
├── gradle
└── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── install.gradle
├── sample
├── .gitignore
├── build.gradle
├── proguard-rules.pro
└── src
│ ├── androidTest
│ └── java
│ │ └── pl
│ │ └── coreorb
│ │ └── selectiondialogssample
│ │ └── ApplicationTest.java
│ ├── main
│ ├── AndroidManifest.xml
│ ├── java
│ │ └── pl
│ │ │ └── coreorb
│ │ │ └── selectiondialogssample
│ │ │ ├── MainActivity.java
│ │ │ └── MainActivityFragment.java
│ └── res
│ │ ├── drawable
│ │ ├── icon_text.xml
│ │ ├── sample_icon_android.xml
│ │ ├── sample_icon_bookmark.xml
│ │ └── sample_icon_puzzle.xml
│ │ ├── layout
│ │ ├── activity_main.xml
│ │ └── fragment_main.xml
│ │ ├── menu
│ │ └── menu_main.xml
│ │ ├── mipmap-hdpi
│ │ └── ic_launcher.png
│ │ ├── mipmap-mdpi
│ │ └── ic_launcher.png
│ │ ├── mipmap-xhdpi
│ │ └── ic_launcher.png
│ │ ├── mipmap-xxhdpi
│ │ └── ic_launcher.png
│ │ ├── mipmap-xxxhdpi
│ │ └── ic_launcher.png
│ │ ├── values-pl
│ │ └── strings.xml
│ │ ├── values-v21
│ │ └── styles.xml
│ │ └── values
│ │ ├── colors.xml
│ │ ├── strings.xml
│ │ └── styles.xml
│ └── test
│ └── java
│ └── pl
│ └── coreorb
│ └── selectiondialogssample
│ └── ExampleUnitTest.java
├── screens
├── Screenshot_ColorSelectionDialog.png
├── Screenshot_Fragment.png
└── Screenshot_IconSelectionDialog.png
├── selection-dialogs
├── .gitignore
├── build.gradle
├── proguard-rules.pro
└── src
│ ├── androidTest
│ └── java
│ │ └── pl
│ │ └── coreorb
│ │ └── selectiondialogs
│ │ └── ApplicationTest.java
│ ├── main
│ ├── AndroidManifest.xml
│ ├── java
│ │ └── pl
│ │ │ └── coreorb
│ │ │ └── selectiondialogs
│ │ │ ├── data
│ │ │ ├── PrimitiveSelectableItem.java
│ │ │ ├── SelectableColor.java
│ │ │ ├── SelectableIcon.java
│ │ │ └── SelectableItemNameComparator.java
│ │ │ ├── dialogs
│ │ │ ├── ColorSelectDialog.java
│ │ │ ├── IconSelectDialog.java
│ │ │ └── adapters
│ │ │ │ ├── ColorListAdapter.java
│ │ │ │ └── IconListAdapter.java
│ │ │ ├── utils
│ │ │ ├── ColorPalettes.java
│ │ │ └── Utils.java
│ │ │ └── views
│ │ │ └── SelectedItemView.java
│ └── res
│ │ ├── drawable
│ │ └── selectiondialogs_default_item_icon.xml
│ │ ├── layout
│ │ ├── selectiondialogs_dialog_item.xml
│ │ └── selectiondialogs_selected_item_view.xml
│ │ ├── values-pl
│ │ └── strings.xml
│ │ └── values
│ │ ├── arrays.xml
│ │ ├── attrs.xml
│ │ ├── colors.xml
│ │ └── strings.xml
│ └── test
│ └── java
│ └── pl
│ └── coreorb
│ └── selectiondialogs
│ └── ExampleUnitTest.java
└── settings.gradle
/.gitignore:
--------------------------------------------------------------------------------
1 | *.iml
2 | .gradle
3 | /local.properties
4 | /.idea/workspace.xml
5 | /.idea/libraries
6 | .DS_Store
7 | /build
8 | /captures
9 |
--------------------------------------------------------------------------------
/.idea/.name:
--------------------------------------------------------------------------------
1 | Selection Dialogs
--------------------------------------------------------------------------------
/.idea/compiler.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/.idea/copyright/profiles_settings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/.idea/encodings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/.idea/gradle.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
25 |
26 |
--------------------------------------------------------------------------------
/.idea/misc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
--------------------------------------------------------------------------------
/.idea/modules.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/.idea/runConfigurations.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 |
2 | Apache License
3 | Version 2.0, January 2004
4 | http://www.apache.org/licenses/
5 |
6 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
7 |
8 | 1. Definitions.
9 |
10 | "License" shall mean the terms and conditions for use, reproduction,
11 | and distribution as defined by Sections 1 through 9 of this document.
12 |
13 | "Licensor" shall mean the copyright owner or entity authorized by
14 | the copyright owner that is granting the License.
15 |
16 | "Legal Entity" shall mean the union of the acting entity and all
17 | other entities that control, are controlled by, or are under common
18 | control with that entity. For the purposes of this definition,
19 | "control" means (i) the power, direct or indirect, to cause the
20 | direction or management of such entity, whether by contract or
21 | otherwise, or (ii) ownership of fifty percent (50%) or more of the
22 | outstanding shares, or (iii) beneficial ownership of such entity.
23 |
24 | "You" (or "Your") shall mean an individual or Legal Entity
25 | exercising permissions granted by this License.
26 |
27 | "Source" form shall mean the preferred form for making modifications,
28 | including but not limited to software source code, documentation
29 | source, and configuration files.
30 |
31 | "Object" form shall mean any form resulting from mechanical
32 | transformation or translation of a Source form, including but
33 | not limited to compiled object code, generated documentation,
34 | and conversions to other media types.
35 |
36 | "Work" shall mean the work of authorship, whether in Source or
37 | Object form, made available under the License, as indicated by a
38 | copyright notice that is included in or attached to the work
39 | (an example is provided in the Appendix below).
40 |
41 | "Derivative Works" shall mean any work, whether in Source or Object
42 | form, that is based on (or derived from) the Work and for which the
43 | editorial revisions, annotations, elaborations, or other modifications
44 | represent, as a whole, an original work of authorship. For the purposes
45 | of this License, Derivative Works shall not include works that remain
46 | separable from, or merely link (or bind by name) to the interfaces of,
47 | the Work and Derivative Works thereof.
48 |
49 | "Contribution" shall mean any work of authorship, including
50 | the original version of the Work and any modifications or additions
51 | to that Work or Derivative Works thereof, that is intentionally
52 | submitted to Licensor for inclusion in the Work by the copyright owner
53 | or by an individual or Legal Entity authorized to submit on behalf of
54 | the copyright owner. For the purposes of this definition, "submitted"
55 | means any form of electronic, verbal, or written communication sent
56 | to the Licensor or its representatives, including but not limited to
57 | communication on electronic mailing lists, source code control systems,
58 | and issue tracking systems that are managed by, or on behalf of, the
59 | Licensor for the purpose of discussing and improving the Work, but
60 | excluding communication that is conspicuously marked or otherwise
61 | designated in writing by the copyright owner as "Not a Contribution."
62 |
63 | "Contributor" shall mean Licensor and any individual or Legal Entity
64 | on behalf of whom a Contribution has been received by Licensor and
65 | subsequently incorporated within the Work.
66 |
67 | 2. Grant of Copyright License. Subject to the terms and conditions of
68 | this License, each Contributor hereby grants to You a perpetual,
69 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
70 | copyright license to reproduce, prepare Derivative Works of,
71 | publicly display, publicly perform, sublicense, and distribute the
72 | Work and such Derivative Works in Source or Object form.
73 |
74 | 3. Grant of Patent License. Subject to the terms and conditions of
75 | this License, each Contributor hereby grants to You a perpetual,
76 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
77 | (except as stated in this section) patent license to make, have made,
78 | use, offer to sell, sell, import, and otherwise transfer the Work,
79 | where such license applies only to those patent claims licensable
80 | by such Contributor that are necessarily infringed by their
81 | Contribution(s) alone or by combination of their Contribution(s)
82 | with the Work to which such Contribution(s) was submitted. If You
83 | institute patent litigation against any entity (including a
84 | cross-claim or counterclaim in a lawsuit) alleging that the Work
85 | or a Contribution incorporated within the Work constitutes direct
86 | or contributory patent infringement, then any patent licenses
87 | granted to You under this License for that Work shall terminate
88 | as of the date such litigation is filed.
89 |
90 | 4. Redistribution. You may reproduce and distribute copies of the
91 | Work or Derivative Works thereof in any medium, with or without
92 | modifications, and in Source or Object form, provided that You
93 | meet the following conditions:
94 |
95 | (a) You must give any other recipients of the Work or
96 | Derivative Works a copy of this License; and
97 |
98 | (b) You must cause any modified files to carry prominent notices
99 | stating that You changed the files; and
100 |
101 | (c) You must retain, in the Source form of any Derivative Works
102 | that You distribute, all copyright, patent, trademark, and
103 | attribution notices from the Source form of the Work,
104 | excluding those notices that do not pertain to any part of
105 | the Derivative Works; and
106 |
107 | (d) If the Work includes a "NOTICE" text file as part of its
108 | distribution, then any Derivative Works that You distribute must
109 | include a readable copy of the attribution notices contained
110 | within such NOTICE file, excluding those notices that do not
111 | pertain to any part of the Derivative Works, in at least one
112 | of the following places: within a NOTICE text file distributed
113 | as part of the Derivative Works; within the Source form or
114 | documentation, if provided along with the Derivative Works; or,
115 | within a display generated by the Derivative Works, if and
116 | wherever such third-party notices normally appear. The contents
117 | of the NOTICE file are for informational purposes only and
118 | do not modify the License. You may add Your own attribution
119 | notices within Derivative Works that You distribute, alongside
120 | or as an addendum to the NOTICE text from the Work, provided
121 | that such additional attribution notices cannot be construed
122 | as modifying the License.
123 |
124 | You may add Your own copyright statement to Your modifications and
125 | may provide additional or different license terms and conditions
126 | for use, reproduction, or distribution of Your modifications, or
127 | for any such Derivative Works as a whole, provided Your use,
128 | reproduction, and distribution of the Work otherwise complies with
129 | the conditions stated in this License.
130 |
131 | 5. Submission of Contributions. Unless You explicitly state otherwise,
132 | any Contribution intentionally submitted for inclusion in the Work
133 | by You to the Licensor shall be under the terms and conditions of
134 | this License, without any additional terms or conditions.
135 | Notwithstanding the above, nothing herein shall supersede or modify
136 | the terms of any separate license agreement you may have executed
137 | with Licensor regarding such Contributions.
138 |
139 | 6. Trademarks. This License does not grant permission to use the trade
140 | names, trademarks, service marks, or product names of the Licensor,
141 | except as required for reasonable and customary use in describing the
142 | origin of the Work and reproducing the content of the NOTICE file.
143 |
144 | 7. Disclaimer of Warranty. Unless required by applicable law or
145 | agreed to in writing, Licensor provides the Work (and each
146 | Contributor provides its Contributions) on an "AS IS" BASIS,
147 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
148 | implied, including, without limitation, any warranties or conditions
149 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
150 | PARTICULAR PURPOSE. You are solely responsible for determining the
151 | appropriateness of using or redistributing the Work and assume any
152 | risks associated with Your exercise of permissions under this License.
153 |
154 | 8. Limitation of Liability. In no event and under no legal theory,
155 | whether in tort (including negligence), contract, or otherwise,
156 | unless required by applicable law (such as deliberate and grossly
157 | negligent acts) or agreed to in writing, shall any Contributor be
158 | liable to You for damages, including any direct, indirect, special,
159 | incidental, or consequential damages of any character arising as a
160 | result of this License or out of the use or inability to use the
161 | Work (including but not limited to damages for loss of goodwill,
162 | work stoppage, computer failure or malfunction, or any and all
163 | other commercial damages or losses), even if such Contributor
164 | has been advised of the possibility of such damages.
165 |
166 | 9. Accepting Warranty or Additional Liability. While redistributing
167 | the Work or Derivative Works thereof, You may choose to offer,
168 | and charge a fee for, acceptance of support, warranty, indemnity,
169 | or other liability obligations and/or rights consistent with this
170 | License. However, in accepting such obligations, You may act only
171 | on Your own behalf and on Your sole responsibility, not on behalf
172 | of any other Contributor, and only if You agree to indemnify,
173 | defend, and hold each Contributor harmless for any liability
174 | incurred by, or claims asserted against, such Contributor by reason
175 | of your accepting any such warranty or additional liability.
176 |
177 | END OF TERMS AND CONDITIONS
178 |
179 | APPENDIX: How to apply the Apache License to your work.
180 |
181 | To apply the Apache License to your work, attach the following
182 | boilerplate notice, with the fields enclosed by brackets "[]"
183 | replaced with your own identifying information. (Don't include
184 | the brackets!) The text should be enclosed in the appropriate
185 | comment syntax for the file format. We also recommend that a
186 | file or class name and description of purpose be included on the
187 | same "printed page" as the copyright notice for easier
188 | identification within third-party archives.
189 |
190 | Copyright [yyyy] [name of copyright owner]
191 |
192 | Licensed under the Apache License, Version 2.0 (the "License");
193 | you may not use this file except in compliance with the License.
194 | You may obtain a copy of the License at
195 |
196 | http://www.apache.org/licenses/LICENSE-2.0
197 |
198 | Unless required by applicable law or agreed to in writing, software
199 | distributed under the License is distributed on an "AS IS" BASIS,
200 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
201 | See the License for the specific language governing permissions and
202 | limitations under the License.
203 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Selection Dialogs
2 | Selection Dialogs is Android library allowing quickly create colors and icons selection dialogs, and providing simple views to display selected items.
3 |
4 | Current version is 0.9.1b
5 |
6 | 
7 | 
8 | 
9 |
10 | ## Download
11 | Library is available as jcenter. Just make sure that grandle uses this repository:
12 |
13 | ```java
14 | repositories {
15 | jcenter()
16 | }
17 | ```
18 |
19 | And add dependency to module.
20 |
21 | ```java
22 | dependencies {
23 | compile 'pl.coreorb:selection-dialogs:0.9.1'
24 | }
25 | ```
26 |
27 | ## Usage
28 | All code presented here shows all methods and properties available, so just remove parts you don't need.
29 |
30 | ### Icon selection dialog
31 | Include below method (or something similar), which builds and shows dialog, in your `Fragment` or `Activity`. Then, call it from onClick of some view.
32 |
33 | ```java
34 | private void showIconSelectDialog() {
35 | new IconSelectDialog.Builder(getContext())
36 | .setIcons(sampleIcons())
37 | .setIcons(R.array.icons_ids,
38 | R.array.icons_names,
39 | R.array.icons_colors)
40 | .setTitle(R.string.title)
41 | .setTitle("Title")
42 | .setSortIconsByName(true)
43 | .setOnIconSelectedListener(this)
44 | .build().show(getFragmentManager(), TAG_SELECT_ICON_DIALOG);
45 | }
46 | ```
47 |
48 | ### Color selection dialog
49 | Include below method (or something similar), which builds and shows dialog, in your `Fragment` or `Activity`. Then, call it from onClick of some view.
50 |
51 | ```java
52 | private void showColorSelectDialog() {
53 | new ColorSelectDialog.Builder(getContext())
54 | .setColors(ColorPalettes.loadMaterialDesignColors500(getContext(), false))
55 | .setColors(R.array.colors_ids,
56 | R.array.colors_names,
57 | R.array.colors_colors)
58 | .setTitle(R.string.title)
59 | .setTitle("Title")
60 | .setSortColorsByName(true)
61 | .setOnColorSelectedListener(this)
62 | .build().show(getFragmentManager(), TAG_SELECT_COLOR_DIALOG);
63 | }
64 | ```
65 |
66 | ### Selected item view
67 | View can be used to display selected item from dialogs (color, icon or text).
68 |
69 | Include view in your `Fragment` or `Activity` layout.
70 |
71 | ```xml
72 |
81 | ```
82 |
83 | Then use `findViewById()` and add `onClick()` in `onCreate()` or `onCreateView()`.
84 |
85 | ```java
86 | colorSIV = (SelectedItemView) rootView.findViewById(R.id.color_siv);
87 | colorSIV.setOnClickListener(new View.OnClickListener() {
88 | @Override
89 | public void onClick(View v) {
90 | showColorSelectDialog();
91 | }
92 | });
93 | ```
94 |
95 | Views has standard setters and getters.
96 |
97 | ```java
98 | SelectedItemView selectedItemView = new SelectedItemView(getContext());
99 |
100 | selectedItemView.setHint("hint");
101 | selectedItemView.setHint(R.string.icon_hint);
102 | selectedItemView.setSelectedName("Android");
103 | selectedItemView.setSelectedName(R.string.icon_hint);
104 | selectedItemView.setSelectedIcon(new SelectableIcon());
105 | selectedItemView.setSelectedColor(new SelectableColor());
106 |
107 | String hint = selectedItemView.getHint();
108 | String name = selectedItemView.getSelectedName();
109 | SelectableIcon icon = selectedItemView.getSelectedIcon();
110 | SelectableColor color = selectedItemView.getSelectedColor();
111 | ```
112 |
113 | ### Color palettes
114 | Library has build in color palettes. Currently only Material Design primary colors (500).
115 | Contact me if You want more palettes added.
116 |
117 | To obtain palette as ArrayList just call one of methods in ColorPalettes class.
118 | Note that palette can be sorted by name via second argument, e.g.:
119 |
120 | ```java
121 | ColorPalettes.loadMaterialDesignColors500(getContext(), false)
122 | ```
123 |
124 | ### Utils
125 | Library delivers Utils class with convert methods:
126 |
127 | ```java
128 | public static ArrayList convertResourceArraysToColorsArrayList(Context context, boolean sortByName, @ArrayRes int idsArray, @ArrayRes int namesArray, @ArrayRes int colorsArray)
129 |
130 | public static ArrayList convertResourceArraysToIconsArrayList(Context context, boolean sortByName, @ArrayRes int idsArray, @ArrayRes int namesArray, @ArrayRes int drawablesArray)
131 | ```
132 |
133 |
134 | ##Handling device configuration changes
135 | If device is rotated with dialog opened, dialog will stay opened, but parent Activity/Fragment will no longer receive callback with selected item.
136 |
137 | One way to handle this is to set listener to `this`(Activity/Fragment) and re-set listener in `onResume()` like this:
138 |
139 | ```java
140 | public class MyFragment extends Fragment implements IconSelectDialog.OnIconSelectedListener {
141 | private static final String TAG_SELECT_ICON_DIALOG = "TAG_SELECT_ICON_DIALOG";
142 |
143 | //fragment code
144 |
145 | private void showIconSelectDialog() {
146 | //set listener to this
147 | new IconSelectDialog.Builder(getContext())
148 | .setIcons(sampleIcons())
149 | .setOnIconSelectedListener(this)
150 | .build().show(getFragmentManager(), TAG_SELECT_ICON_DIALOG);
151 | }
152 |
153 | @Override
154 | public void onResume() {
155 | super.onResume();
156 | //find dialog and set listener
157 | IconSelectDialog iconDialog = (IconSelectDialog) getFragmentManager().findFragmentByTag(TAG_SELECT_ICON_DIALOG);
158 | if (iconDialog != null) {
159 | iconDialog.setOnIconSelectedListener(this);
160 | }
161 | }
162 | }
163 | ```
164 |
165 | For complete implementation take a look at [MainActivityFragment.java](sample/src/main/java/pl/coreorb/selectiondialogssample/MainActivityFragment.java).
166 |
167 | ## JavaDoc
168 | Coming soon...
169 |
170 | ## Licence
171 |
172 | [Apache License, Version 2.0](LICENCE).
173 |
174 | ## Change log
175 |
176 | ### 0.9.1b
177 | - "Handling device configuration changes" chapter filled
178 | - added new constructors to SelectableColor and SelectableIcon
179 |
180 | ### 0.9.1
181 | - SelectedIconView and SelectedColorView simplified into one view: SelectedItemView
182 | - ColorPalettes class added
183 | - Utils class added
184 | - updated sample with sane defaults
185 |
186 | ### 0.9.0
187 | Initial release
188 |
--------------------------------------------------------------------------------
/bintray.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'com.jfrog.bintray'
2 |
3 | version = libraryVersion
4 |
5 | task sourcesJar(type: Jar) {
6 | from android.sourceSets.main.java.srcDirs
7 | classifier = 'sources'
8 | }
9 |
10 | task javadoc(type: Javadoc) {
11 | source = android.sourceSets.main.java.srcDirs
12 | classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
13 | }
14 |
15 | task javadocJar(type: Jar, dependsOn: javadoc) {
16 | classifier = 'javadoc'
17 | from javadoc.destinationDir
18 | }
19 | artifacts {
20 | archives javadocJar
21 | archives sourcesJar
22 | }
23 |
24 | // Bintray
25 | Properties properties = new Properties()
26 | properties.load(project.rootProject.file('local.properties').newDataInputStream())
27 |
28 | bintray {
29 | user = properties.getProperty("bintray.user")
30 | key = properties.getProperty("bintray.apikey")
31 |
32 | configurations = ['archives']
33 | pkg {
34 | repo = bintrayRepo
35 | name = bintrayName
36 | desc = libraryDescription
37 | websiteUrl = siteUrl
38 | vcsUrl = gitUrl
39 | licenses = allLicenses
40 | publish = true
41 | publicDownloadNumbers = true
42 | version {
43 | desc = libraryDescription
44 | gpg {
45 | sign = true //Determines whether to GPG sign the files. The default is false
46 | passphrase = properties.getProperty("bintray.gpg.password")
47 | //Optional. The passphrase for GPG signing'
48 | }
49 | }
50 | }
51 | }
52 |
--------------------------------------------------------------------------------
/build.gradle:
--------------------------------------------------------------------------------
1 | // Top-level build file where you can add configuration options common to all sub-projects/modules.
2 |
3 | buildscript {
4 | repositories {
5 | jcenter()
6 | }
7 | dependencies {
8 | classpath 'com.android.tools.build:gradle:2.1.0'
9 | classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.4'
10 | classpath 'com.github.dcendents:android-maven-gradle-plugin:1.3'
11 |
12 | // NOTE: Do not place your application dependencies here; they belong
13 | // in the individual module build.gradle files
14 | }
15 | }
16 |
17 | allprojects {
18 | repositories {
19 | jcenter()
20 | }
21 | }
22 |
23 | task clean(type: Delete) {
24 | delete rootProject.buildDir
25 | }
26 |
--------------------------------------------------------------------------------
/gradle.properties:
--------------------------------------------------------------------------------
1 | # Project-wide Gradle settings.
2 |
3 | # IDE (e.g. Android Studio) users:
4 | # Gradle settings configured through the IDE *will override*
5 | # any settings specified in this file.
6 |
7 | # For more details on how to configure your build environment visit
8 | # http://www.gradle.org/docs/current/userguide/build_environment.html
9 |
10 | # Specifies the JVM arguments used for the daemon process.
11 | # The setting is particularly useful for tweaking memory settings.
12 | # Default value: -Xmx10248m -XX:MaxPermSize=256m
13 | # org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
14 |
15 | # When configured, Gradle will run in incubating parallel mode.
16 | # This option should only be used with decoupled projects. More details, visit
17 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
18 | # org.gradle.parallel=true
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coreORB/SelectionDialogs/8e229688720e75cd9a40590b2278d827810b95c8/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | #Mon Dec 28 10:00:20 PST 2015
2 | distributionBase=GRADLE_USER_HOME
3 | distributionPath=wrapper/dists
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 | distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
7 |
--------------------------------------------------------------------------------
/gradlew:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 | ##############################################################################
4 | ##
5 | ## Gradle start up script for UN*X
6 | ##
7 | ##############################################################################
8 |
9 | # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
10 | DEFAULT_JVM_OPTS=""
11 |
12 | APP_NAME="Gradle"
13 | APP_BASE_NAME=`basename "$0"`
14 |
15 | # Use the maximum available, or set MAX_FD != -1 to use that value.
16 | MAX_FD="maximum"
17 |
18 | warn ( ) {
19 | echo "$*"
20 | }
21 |
22 | die ( ) {
23 | echo
24 | echo "$*"
25 | echo
26 | exit 1
27 | }
28 |
29 | # OS specific support (must be 'true' or 'false').
30 | cygwin=false
31 | msys=false
32 | darwin=false
33 | case "`uname`" in
34 | CYGWIN* )
35 | cygwin=true
36 | ;;
37 | Darwin* )
38 | darwin=true
39 | ;;
40 | MINGW* )
41 | msys=true
42 | ;;
43 | esac
44 |
45 | # Attempt to set APP_HOME
46 | # Resolve links: $0 may be a link
47 | PRG="$0"
48 | # Need this for relative symlinks.
49 | while [ -h "$PRG" ] ; do
50 | ls=`ls -ld "$PRG"`
51 | link=`expr "$ls" : '.*-> \(.*\)$'`
52 | if expr "$link" : '/.*' > /dev/null; then
53 | PRG="$link"
54 | else
55 | PRG=`dirname "$PRG"`"/$link"
56 | fi
57 | done
58 | SAVED="`pwd`"
59 | cd "`dirname \"$PRG\"`/" >/dev/null
60 | APP_HOME="`pwd -P`"
61 | cd "$SAVED" >/dev/null
62 |
63 | CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
64 |
65 | # Determine the Java command to use to start the JVM.
66 | if [ -n "$JAVA_HOME" ] ; then
67 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
68 | # IBM's JDK on AIX uses strange locations for the executables
69 | JAVACMD="$JAVA_HOME/jre/sh/java"
70 | else
71 | JAVACMD="$JAVA_HOME/bin/java"
72 | fi
73 | if [ ! -x "$JAVACMD" ] ; then
74 | die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
75 |
76 | Please set the JAVA_HOME variable in your environment to match the
77 | location of your Java installation."
78 | fi
79 | else
80 | JAVACMD="java"
81 | which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
82 |
83 | Please set the JAVA_HOME variable in your environment to match the
84 | location of your Java installation."
85 | fi
86 |
87 | # Increase the maximum file descriptors if we can.
88 | if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
89 | MAX_FD_LIMIT=`ulimit -H -n`
90 | if [ $? -eq 0 ] ; then
91 | if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
92 | MAX_FD="$MAX_FD_LIMIT"
93 | fi
94 | ulimit -n $MAX_FD
95 | if [ $? -ne 0 ] ; then
96 | warn "Could not set maximum file descriptor limit: $MAX_FD"
97 | fi
98 | else
99 | warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
100 | fi
101 | fi
102 |
103 | # For Darwin, add options to specify how the application appears in the dock
104 | if $darwin; then
105 | GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:selectionDialogsColor=$APP_HOME/media/gradle.icns\""
106 | fi
107 |
108 | # For Cygwin, switch paths to Windows format before running java
109 | if $cygwin ; then
110 | APP_HOME=`cygpath --path --mixed "$APP_HOME"`
111 | CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
112 | JAVACMD=`cygpath --unix "$JAVACMD"`
113 |
114 | # We build the pattern for arguments to be converted via cygpath
115 | ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
116 | SEP=""
117 | for dir in $ROOTDIRSRAW ; do
118 | ROOTDIRS="$ROOTDIRS$SEP$dir"
119 | SEP="|"
120 | done
121 | OURCYGPATTERN="(^($ROOTDIRS))"
122 | # Add a user-defined pattern to the cygpath arguments
123 | if [ "$GRADLE_CYGPATTERN" != "" ] ; then
124 | OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
125 | fi
126 | # Now convert the arguments - kludge to limit ourselves to /bin/sh
127 | i=0
128 | for arg in "$@" ; do
129 | CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
130 | CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
131 |
132 | if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
133 | eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
134 | else
135 | eval `echo args$i`="\"$arg\""
136 | fi
137 | i=$((i+1))
138 | done
139 | case $i in
140 | (0) set -- ;;
141 | (1) set -- "$args0" ;;
142 | (2) set -- "$args0" "$args1" ;;
143 | (3) set -- "$args0" "$args1" "$args2" ;;
144 | (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
145 | (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
146 | (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
147 | (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
148 | (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
149 | (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
150 | esac
151 | fi
152 |
153 | # Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
154 | function splitJvmOpts() {
155 | JVM_OPTS=("$@")
156 | }
157 | eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
158 | JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
159 |
160 | exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"
161 |
--------------------------------------------------------------------------------
/gradlew.bat:
--------------------------------------------------------------------------------
1 | @if "%DEBUG%" == "" @echo off
2 | @rem ##########################################################################
3 | @rem
4 | @rem Gradle startup script for Windows
5 | @rem
6 | @rem ##########################################################################
7 |
8 | @rem Set local scope for the variables with windows NT shell
9 | if "%OS%"=="Windows_NT" setlocal
10 |
11 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
12 | set DEFAULT_JVM_OPTS=
13 |
14 | set DIRNAME=%~dp0
15 | if "%DIRNAME%" == "" set DIRNAME=.
16 | set APP_BASE_NAME=%~n0
17 | set APP_HOME=%DIRNAME%
18 |
19 | @rem Find java.exe
20 | if defined JAVA_HOME goto findJavaFromJavaHome
21 |
22 | set JAVA_EXE=java.exe
23 | %JAVA_EXE% -version >NUL 2>&1
24 | if "%ERRORLEVEL%" == "0" goto init
25 |
26 | echo.
27 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
28 | echo.
29 | echo Please set the JAVA_HOME variable in your environment to match the
30 | echo location of your Java installation.
31 |
32 | goto fail
33 |
34 | :findJavaFromJavaHome
35 | set JAVA_HOME=%JAVA_HOME:"=%
36 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe
37 |
38 | if exist "%JAVA_EXE%" goto init
39 |
40 | echo.
41 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
42 | echo.
43 | echo Please set the JAVA_HOME variable in your environment to match the
44 | echo location of your Java installation.
45 |
46 | goto fail
47 |
48 | :init
49 | @rem Get command-line arguments, handling Windowz variants
50 |
51 | if not "%OS%" == "Windows_NT" goto win9xME_args
52 | if "%@eval[2+2]" == "4" goto 4NT_args
53 |
54 | :win9xME_args
55 | @rem Slurp the command line arguments.
56 | set CMD_LINE_ARGS=
57 | set _SKIP=2
58 |
59 | :win9xME_args_slurp
60 | if "x%~1" == "x" goto execute
61 |
62 | set CMD_LINE_ARGS=%*
63 | goto execute
64 |
65 | :4NT_args
66 | @rem Get arguments from the 4NT Shell from JP Software
67 | set CMD_LINE_ARGS=%$
68 |
69 | :execute
70 | @rem Setup the command line
71 |
72 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
73 |
74 | @rem Execute Gradle
75 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
76 |
77 | :end
78 | @rem End local scope for the variables with windows NT shell
79 | if "%ERRORLEVEL%"=="0" goto mainEnd
80 |
81 | :fail
82 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
83 | rem the _cmd.exe /c_ return code!
84 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
85 | exit /b 1
86 |
87 | :mainEnd
88 | if "%OS%"=="Windows_NT" endlocal
89 |
90 | :omega
91 |
--------------------------------------------------------------------------------
/install.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'com.github.dcendents.android-maven'
2 |
3 | group = publishedGroupId // Maven Group ID for the artifact
4 |
5 | install {
6 | repositories.mavenInstaller {
7 | // This generates POM.xml with proper parameters
8 | pom {
9 | project {
10 | packaging 'aar'
11 | groupId publishedGroupId
12 | artifactId artifact
13 |
14 | // Add your description here
15 | name libraryName
16 | description libraryDescription
17 | url siteUrl
18 |
19 | // Set your license
20 | licenses {
21 | license {
22 | name licenseName
23 | url licenseUrl
24 | }
25 | }
26 | developers {
27 | developer {
28 | id developerId
29 | name developerName
30 | email developerEmail
31 | }
32 | }
33 | scm {
34 | connection gitUrl
35 | developerConnection gitUrl
36 | url siteUrl
37 |
38 | }
39 | }
40 | }
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/sample/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/sample/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'com.android.application'
2 |
3 | android {
4 | compileSdkVersion 23
5 | buildToolsVersion "23.0.3"
6 |
7 | defaultConfig {
8 | applicationId "pl.coreorb.selectiondialogs"
9 | minSdkVersion 15
10 | targetSdkVersion 23
11 | versionCode 2
12 | versionName "0.9.1"
13 | }
14 | buildTypes {
15 | release {
16 | minifyEnabled false
17 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
18 | }
19 | }
20 | }
21 |
22 | dependencies {
23 | compile fileTree(include: ['*.jar'], dir: 'libs')
24 | testCompile 'junit:junit:4.12'
25 | compile 'com.android.support:appcompat-v7:23.3.0'
26 | compile 'com.android.support:design:23.3.0'
27 | compile project(':selection-dialogs')
28 | }
29 |
--------------------------------------------------------------------------------
/sample/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # By default, the flags in this file are appended to flags specified
3 | # in C:\Users\ZaYeR\AppData\Local\Android\Sdk/tools/proguard/proguard-android.txt
4 | # You can edit the include path and order by changing the proguardFiles
5 | # directive in build.gradle.
6 | #
7 | # For more details, see
8 | # http://developer.android.com/guide/developing/tools/proguard.html
9 |
10 | # Add any project specific keep options here:
11 |
12 | # If your project uses WebView with JS, uncomment the following
13 | # and specify the fully qualified class name to the JavaScript interface
14 | # class:
15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
16 | # public *;
17 | #}
18 |
--------------------------------------------------------------------------------
/sample/src/androidTest/java/pl/coreorb/selectiondialogssample/ApplicationTest.java:
--------------------------------------------------------------------------------
1 | package pl.coreorb.selectiondialogssample;
2 |
3 | import android.app.Application;
4 | import android.test.ApplicationTestCase;
5 |
6 | /**
7 | * Testing Fundamentals
8 | */
9 | public class ApplicationTest extends ApplicationTestCase {
10 | public ApplicationTest() {
11 | super(Application.class);
12 | }
13 | }
--------------------------------------------------------------------------------
/sample/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
11 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/sample/src/main/java/pl/coreorb/selectiondialogssample/MainActivity.java:
--------------------------------------------------------------------------------
1 | package pl.coreorb.selectiondialogssample;
2 |
3 | import android.os.Bundle;
4 | import android.support.v7.app.AppCompatActivity;
5 | import android.support.v7.widget.Toolbar;
6 | import android.view.Menu;
7 | import android.view.MenuItem;
8 |
9 | /**
10 | * Activity for sample app. Only boiler plate code here.
11 | */
12 | public class MainActivity extends AppCompatActivity {
13 |
14 | @Override
15 | protected void onCreate(Bundle savedInstanceState) {
16 | super.onCreate(savedInstanceState);
17 | setContentView(R.layout.activity_main);
18 | Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
19 | setSupportActionBar(toolbar);
20 | }
21 |
22 | @Override
23 | public boolean onCreateOptionsMenu(Menu menu) {
24 | // Inflate the menu; this adds items to the action bar if it is present.
25 | getMenuInflater().inflate(R.menu.menu_main, menu);
26 | return true;
27 | }
28 |
29 | @Override
30 | public boolean onOptionsItemSelected(MenuItem item) {
31 | // Handle action bar item clicks here. The action bar will
32 | // automatically handle clicks on the Home/Up button, so long
33 | // as you specify a parent activity in AndroidManifest.xml.
34 | int id = item.getItemId();
35 |
36 | //noinspection SimplifiableIfStatement
37 | if (id == R.id.action_settings) {
38 | return true;
39 | }
40 |
41 | return super.onOptionsItemSelected(item);
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/sample/src/main/java/pl/coreorb/selectiondialogssample/MainActivityFragment.java:
--------------------------------------------------------------------------------
1 | package pl.coreorb.selectiondialogssample;
2 |
3 | import android.content.DialogInterface;
4 | import android.os.Bundle;
5 | import android.support.v4.app.Fragment;
6 | import android.support.v7.app.AlertDialog;
7 | import android.view.LayoutInflater;
8 | import android.view.View;
9 | import android.view.ViewGroup;
10 | import android.widget.EditText;
11 |
12 | import java.util.ArrayList;
13 |
14 | import pl.coreorb.selectiondialogs.data.SelectableColor;
15 | import pl.coreorb.selectiondialogs.data.SelectableIcon;
16 | import pl.coreorb.selectiondialogs.dialogs.ColorSelectDialog;
17 | import pl.coreorb.selectiondialogs.dialogs.IconSelectDialog;
18 | import pl.coreorb.selectiondialogs.utils.ColorPalettes;
19 | import pl.coreorb.selectiondialogs.views.SelectedItemView;
20 |
21 | /**
22 | * Fragment for sample app. This one is more interesting :)
23 | */
24 | public class MainActivityFragment extends Fragment implements IconSelectDialog.OnIconSelectedListener,
25 | ColorSelectDialog.OnColorSelectedListener {
26 |
27 | private static final String TAG_SELECT_ICON_DIALOG = "TAG_SELECT_ICON_DIALOG";
28 | private static final String TAG_SELECT_COLOR_DIALOG = "TAG_SELECT_COLOR_DIALOG";
29 | private static final String TAG_SELECT_TEXT_DIALOG = "TAG_SELECT_TEXT_DIALOG";
30 |
31 | private SelectedItemView iconSIV;
32 | private SelectedItemView colorSIV;
33 | private SelectedItemView textSIV;
34 |
35 | public MainActivityFragment() {
36 | }
37 |
38 | @Override
39 | public View onCreateView(LayoutInflater inflater, ViewGroup container,
40 | Bundle savedInstanceState) {
41 | View rootView = inflater.inflate(R.layout.fragment_main, container, false);
42 |
43 | iconSIV = (SelectedItemView) rootView.findViewById(R.id.icon_siv);
44 | iconSIV.setOnClickListener(new View.OnClickListener() {
45 | @Override
46 | public void onClick(View v) {
47 | showIconSelectDialog();
48 | }
49 | });
50 |
51 | colorSIV = (SelectedItemView) rootView.findViewById(R.id.color_siv);
52 | colorSIV.setOnClickListener(new View.OnClickListener() {
53 | @Override
54 | public void onClick(View v) {
55 | showColorSelectDialog();
56 | }
57 | });
58 |
59 | textSIV = (SelectedItemView) rootView.findViewById(R.id.text_siv);
60 | textSIV.setOnClickListener(new View.OnClickListener() {
61 | @Override
62 | public void onClick(View v) {
63 | showTextInputDialog();
64 | }
65 | });
66 |
67 | return rootView;
68 | }
69 |
70 | @Override
71 | public void onResume() {
72 | super.onResume();
73 | IconSelectDialog iconDialog = (IconSelectDialog) getFragmentManager().findFragmentByTag(TAG_SELECT_ICON_DIALOG);
74 | if (iconDialog != null) {
75 | iconDialog.setOnIconSelectedListener(this);
76 | }
77 | ColorSelectDialog colorDialog = (ColorSelectDialog) getFragmentManager().findFragmentByTag(TAG_SELECT_COLOR_DIALOG);
78 | if (colorDialog != null) {
79 | colorDialog.setOnColorSelectedListener(this);
80 | }
81 | }
82 |
83 | /**
84 | * Displays selected icon in {@link SelectedItemView} view.
85 | * @param selectedItem selected {@link SelectableIcon} object containing: id, name and drawable resource id.
86 | */
87 | @Override
88 | public void onIconSelected(SelectableIcon selectedItem) {
89 | iconSIV.setSelectedIcon(selectedItem);
90 | }
91 |
92 | /**
93 | * Displays selected color in {@link SelectedItemView} view.
94 | * @param selectedItem selected {@link SelectableColor} object containing: id, name and color value.
95 | */
96 | @Override
97 | public void onColorSelected(SelectableColor selectedItem) {
98 | colorSIV.setSelectedColor(selectedItem);
99 | }
100 |
101 | /**
102 | * Shows icon selection dialog with sample icons.
103 | */
104 | private void showIconSelectDialog() {
105 | new IconSelectDialog.Builder(getContext())
106 | .setIcons(sampleIcons())
107 | .setTitle(R.string.selectiondialogs_icon_dialog_title)
108 | .setSortIconsByName(true)
109 | .setOnIconSelectedListener(this)
110 | .build().show(getFragmentManager(), TAG_SELECT_ICON_DIALOG);
111 | }
112 |
113 | /**
114 | * Shows color selection dialog with default Material Design icons.
115 | */
116 | private void showColorSelectDialog() {
117 | new ColorSelectDialog.Builder(getContext())
118 | .setColors(ColorPalettes.loadMaterialDesignColors500(getContext(), false))
119 | .setTitle(R.string.selectiondialogs_color_dialog_title)
120 | .setSortColorsByName(true)
121 | .setOnColorSelectedListener(this)
122 | .build().show(getFragmentManager(), TAG_SELECT_COLOR_DIALOG);
123 | }
124 |
125 | private void showTextInputDialog() {
126 | final EditText textET = new EditText(getContext());
127 |
128 | new AlertDialog.Builder(getContext())
129 | .setTitle(R.string.text_input_dialog_title)
130 | .setView(textET)
131 | .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
132 | public void onClick(DialogInterface dialog, int whichButton) {
133 | textSIV.setSelectedName(textET.getText().toString());
134 | }
135 | })
136 | .setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
137 | public void onClick(DialogInterface dialog, int whichButton) {
138 | }
139 | })
140 | .show();
141 | }
142 |
143 | /**
144 | * Creates sample ArrayList of icons to display in dialog.
145 | * @return sample icons
146 | */
147 | private static ArrayList sampleIcons() {
148 | ArrayList selectionDialogsColors = new ArrayList<>();
149 | selectionDialogsColors.add(new SelectableIcon("puzzle", "Puzzle", R.drawable.sample_icon_puzzle));
150 | selectionDialogsColors.add(new SelectableIcon("android", "Android", R.drawable.sample_icon_android));
151 | selectionDialogsColors.add(new SelectableIcon("bookmark", "Bookmark", R.drawable.sample_icon_bookmark));
152 | return selectionDialogsColors;
153 | }
154 | }
155 |
--------------------------------------------------------------------------------
/sample/src/main/res/drawable/icon_text.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/sample/src/main/res/drawable/sample_icon_android.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/sample/src/main/res/drawable/sample_icon_bookmark.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/sample/src/main/res/drawable/sample_icon_puzzle.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/sample/src/main/res/layout/activity_main.xml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
14 |
15 |
21 |
22 |
23 |
24 |
33 |
34 |
35 |
--------------------------------------------------------------------------------
/sample/src/main/res/layout/fragment_main.xml:
--------------------------------------------------------------------------------
1 |
8 |
9 |
13 |
14 |
21 |
22 |
29 |
30 |
37 |
38 |
39 |
--------------------------------------------------------------------------------
/sample/src/main/res/menu/menu_main.xml:
--------------------------------------------------------------------------------
1 |
11 |
--------------------------------------------------------------------------------
/sample/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coreORB/SelectionDialogs/8e229688720e75cd9a40590b2278d827810b95c8/sample/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/sample/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coreORB/SelectionDialogs/8e229688720e75cd9a40590b2278d827810b95c8/sample/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/sample/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coreORB/SelectionDialogs/8e229688720e75cd9a40590b2278d827810b95c8/sample/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/sample/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coreORB/SelectionDialogs/8e229688720e75cd9a40590b2278d827810b95c8/sample/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/sample/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coreORB/SelectionDialogs/8e229688720e75cd9a40590b2278d827810b95c8/sample/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/sample/src/main/res/values-pl/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | Selection Dialogs Sample
4 | Ustawienia
5 |
6 | Ikona
7 | Kolor
8 | Tekst
9 | Wprowadź trochę tekstu…
10 |
--------------------------------------------------------------------------------
/sample/src/main/res/values-v21/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
9 |
10 |
--------------------------------------------------------------------------------
/sample/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #3F51B5
4 | #1A237E
5 | #8BC34A
6 |
7 |
--------------------------------------------------------------------------------
/sample/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 | Selection Dialogs Sample
3 | Settings
4 |
5 | Icon
6 | Color
7 | Text
8 | Input some text…
9 |
10 |
--------------------------------------------------------------------------------
/sample/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
10 |
11 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/sample/src/test/java/pl/coreorb/selectiondialogssample/ExampleUnitTest.java:
--------------------------------------------------------------------------------
1 | package pl.coreorb.selectiondialogssample;
2 |
3 | import org.junit.Test;
4 |
5 | import static org.junit.Assert.*;
6 |
7 | /**
8 | * To work on unit tests, switch the Test Artifact in the Build Variants view.
9 | */
10 | public class ExampleUnitTest {
11 | @Test
12 | public void addition_isCorrect() throws Exception {
13 | assertEquals(4, 2 + 2);
14 | }
15 | }
--------------------------------------------------------------------------------
/screens/Screenshot_ColorSelectionDialog.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coreORB/SelectionDialogs/8e229688720e75cd9a40590b2278d827810b95c8/screens/Screenshot_ColorSelectionDialog.png
--------------------------------------------------------------------------------
/screens/Screenshot_Fragment.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coreORB/SelectionDialogs/8e229688720e75cd9a40590b2278d827810b95c8/screens/Screenshot_Fragment.png
--------------------------------------------------------------------------------
/screens/Screenshot_IconSelectionDialog.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coreORB/SelectionDialogs/8e229688720e75cd9a40590b2278d827810b95c8/screens/Screenshot_IconSelectionDialog.png
--------------------------------------------------------------------------------
/selection-dialogs/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/selection-dialogs/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'com.android.library'
2 |
3 | ext {
4 | bintrayRepo = 'maven'
5 | bintrayName = 'selection-dialogs'
6 |
7 | publishedGroupId = 'pl.coreorb'
8 | libraryName = 'Selection Dialogs'
9 | artifact = 'selection-dialogs'
10 |
11 | libraryDescription = 'Selection Dialogs is Android library allowing quickly create colors and icons selection dialogs, and providing simple views to display selected items.'
12 |
13 | siteUrl = 'https://github.com/ZaYeR-PL/SelectionDialogs'
14 | gitUrl = 'https://github.com/ZaYeR-PL/SelectionDialogs.git'
15 |
16 | libraryVersion = '0.9.1'
17 |
18 | developerId = 'zayer-pl'
19 | developerName = 'Rafał Ziemlanka'
20 | developerEmail = 'rafal.ziemlanka@gmail.com'
21 |
22 | licenseName = 'The Apache Software License, Version 2.0'
23 | licenseUrl = 'http://www.apache.org/licenses/LICENSE-2.0.txt'
24 | allLicenses = ["Apache-2.0"]
25 | }
26 |
27 | android {
28 | compileSdkVersion 23
29 | buildToolsVersion "23.0.3"
30 |
31 | defaultConfig {
32 | minSdkVersion 15
33 | targetSdkVersion 23
34 | versionCode 2
35 | versionName "0.9.1"
36 | }
37 | buildTypes {
38 | release {
39 | minifyEnabled false
40 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
41 | }
42 | }
43 | }
44 |
45 | dependencies {
46 | compile fileTree(dir: 'libs', include: ['*.jar'])
47 | testCompile 'junit:junit:4.12'
48 | compile 'com.android.support:appcompat-v7:23.3.0'
49 | compile 'com.balysv:material-ripple:1.0.2'
50 | compile 'com.android.support:support-annotations:23.3.0'
51 | }
52 |
53 | apply from: '../install.gradle'
54 | apply from: '../bintray.gradle'
--------------------------------------------------------------------------------
/selection-dialogs/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # By default, the flags in this file are appended to flags specified
3 | # in C:\Users\ZaYeR\AppData\Local\Android\Sdk/tools/proguard/proguard-android.txt
4 | # You can edit the include path and order by changing the proguardFiles
5 | # directive in build.gradle.
6 | #
7 | # For more details, see
8 | # http://developer.android.com/guide/developing/tools/proguard.html
9 |
10 | # Add any project specific keep options here:
11 |
12 | # If your project uses WebView with JS, uncomment the following
13 | # and specify the fully qualified class name to the JavaScript interface
14 | # class:
15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
16 | # public *;
17 | #}
18 |
--------------------------------------------------------------------------------
/selection-dialogs/src/androidTest/java/pl/coreorb/selectiondialogs/ApplicationTest.java:
--------------------------------------------------------------------------------
1 | package pl.coreorb.selectiondialogs;
2 |
3 | import android.app.Application;
4 | import android.test.ApplicationTestCase;
5 |
6 | /**
7 | * Testing Fundamentals
8 | */
9 | public class ApplicationTest extends ApplicationTestCase {
10 | public ApplicationTest() {
11 | super(Application.class);
12 | }
13 | }
--------------------------------------------------------------------------------
/selection-dialogs/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/selection-dialogs/src/main/java/pl/coreorb/selectiondialogs/data/PrimitiveSelectableItem.java:
--------------------------------------------------------------------------------
1 | package pl.coreorb.selectiondialogs.data;
2 |
3 | import android.content.Context;
4 | import android.os.Parcel;
5 | import android.os.Parcelable;
6 | import android.support.annotation.StringRes;
7 |
8 | /**
9 | * Class of primitive object used in every dialog in this library.
10 | */
11 | public abstract class PrimitiveSelectableItem implements Parcelable {
12 |
13 | protected String id;
14 | protected String name;
15 |
16 | public PrimitiveSelectableItem() {
17 | id = "no_id";
18 | name = "";
19 | }
20 |
21 | public PrimitiveSelectableItem(Parcel in) {
22 | id = in.readString();
23 | name = in.readString();
24 | }
25 |
26 | public PrimitiveSelectableItem(String id, String name) {
27 | this.id = id;
28 | this.name = name;
29 | }
30 |
31 | public PrimitiveSelectableItem(Context context, @StringRes int idResId, @StringRes int nameResId) {
32 | this.id = context.getString(idResId);
33 | this.name = context.getString(nameResId);
34 | }
35 |
36 | /**
37 | * Returns unique identifier of this item.
38 | * @return unique identifier of this item.
39 | */
40 | public String getId() {
41 | return id;
42 | }
43 |
44 | /**
45 | * Sets unique identifier of this item.
46 | * @param id unique identifier to use for this item
47 | */
48 | public void setId(String id) {
49 | this.id = id;
50 | }
51 |
52 | /**
53 | * Returns name of this item.
54 | * @return name of item
55 | */
56 | public String getName() {
57 | return name;
58 | }
59 |
60 | /**
61 | * Sets name of item that will be shown to user in dialog and view.
62 | * @param name name to use form this item
63 | */
64 | public void setName(String name) {
65 | this.name = name;
66 | }
67 |
68 | @Override
69 | public int describeContents() {
70 | return 0;
71 | }
72 |
73 | @Override
74 | public void writeToParcel(Parcel dest, int flags) {
75 | dest.writeString(id);
76 | dest.writeString(name);
77 | }
78 | }
79 |
--------------------------------------------------------------------------------
/selection-dialogs/src/main/java/pl/coreorb/selectiondialogs/data/SelectableColor.java:
--------------------------------------------------------------------------------
1 | package pl.coreorb.selectiondialogs.data;
2 |
3 | import android.content.Context;
4 | import android.os.Parcel;
5 | import android.support.annotation.ColorInt;
6 | import android.support.annotation.StringRes;
7 |
8 | /**
9 | * Object defining selectable colorValue in this library.
10 | */
11 | public class SelectableColor extends PrimitiveSelectableItem {
12 |
13 | private
14 | @ColorInt
15 | int colorValue;
16 |
17 | public SelectableColor() {
18 | super();
19 | colorValue = 0;
20 | }
21 |
22 | public SelectableColor(Parcel in) {
23 | super(in);
24 | colorValue = in.readInt();
25 | }
26 |
27 | public SelectableColor(String id, String name, @ColorInt int colorValue) {
28 | super(id, name);
29 | this.colorValue = colorValue;
30 | }
31 |
32 | public SelectableColor(Context context, @StringRes int idResId, @StringRes int nameResId, @ColorInt int colorValue) {
33 | super(context, idResId, nameResId);
34 | this.colorValue = colorValue;
35 | }
36 |
37 | /**
38 | * Returns colorValue integer value of this colorValue.
39 | * @return colorValue integer value of this colorValue
40 | */
41 | public int getColorValue() {
42 | return colorValue;
43 | }
44 |
45 | /**
46 | * Sets colorValue integer value of this colorValue.
47 | * @param colorValue colorValue integer value to use as this colorValue value
48 | */
49 | public void setColorValue(int colorValue) {
50 | this.colorValue = colorValue;
51 | }
52 |
53 | @Override
54 | public String toString() {
55 | return "SelectableColor{" +
56 | "id='" + id + '\'' +
57 | ", name='" + name + '\'' +
58 | ", colorValue=" + colorValue +
59 | '}';
60 | }
61 |
62 | @Override
63 | public void writeToParcel(Parcel dest, int flags) {
64 | super.writeToParcel(dest, flags);
65 | dest.writeInt(colorValue);
66 | }
67 |
68 | public static final Creator CREATOR = new Creator() {
69 |
70 | @Override
71 | public SelectableColor createFromParcel(Parcel source) {
72 | return new SelectableColor(source);
73 | }
74 |
75 | @Override
76 | public SelectableColor[] newArray(int size) {
77 | return new SelectableColor[size];
78 | }
79 | };
80 | }
81 |
--------------------------------------------------------------------------------
/selection-dialogs/src/main/java/pl/coreorb/selectiondialogs/data/SelectableIcon.java:
--------------------------------------------------------------------------------
1 | package pl.coreorb.selectiondialogs.data;
2 |
3 | import android.content.Context;
4 | import android.os.Parcel;
5 | import android.support.annotation.DrawableRes;
6 | import android.support.annotation.StringRes;
7 |
8 | import pl.coreorb.selectiondialogs.R;
9 |
10 | /**
11 | * Object defining selectable icon in this library.
12 | */
13 | public class SelectableIcon extends PrimitiveSelectableItem {
14 |
15 | private @DrawableRes int drawableResId;
16 |
17 | public SelectableIcon() {
18 | super();
19 | drawableResId = R.drawable.selectiondialogs_default_item_icon;
20 | }
21 |
22 | public SelectableIcon(Parcel in) {
23 | super(in);
24 | drawableResId = in.readInt();
25 | }
26 |
27 | public SelectableIcon(String id, String name, @DrawableRes int drawableResId) {
28 | super(id, name);
29 | this.drawableResId = drawableResId;
30 | }
31 |
32 | public SelectableIcon(Context context, @StringRes int idResId, @StringRes int nameResId, @DrawableRes int drawableResId) {
33 | super(context, idResId, nameResId);
34 | this.drawableResId = drawableResId;
35 | }
36 |
37 | /**
38 | * Returns resource ID of this icon drawable.
39 | * @return resource ID of this icon drawable
40 | */
41 | public int getDrawableResId() {
42 | return drawableResId;
43 | }
44 |
45 | /**
46 | * Sets resource ID of this icon drawable.
47 | * @param drawableResId drawable resource ID to use as this icon drawable
48 | */
49 | public void setDrawableResId(int drawableResId) {
50 | this.drawableResId = drawableResId;
51 | }
52 |
53 | @Override
54 | public String toString() {
55 | return "SelectableIcon{" +
56 | "id='" + id + '\'' +
57 | ", name='" + name + '\'' +
58 | ", drawableResId=" + drawableResId +
59 | '}';
60 | }
61 |
62 | @Override
63 | public void writeToParcel(Parcel dest, int flags) {
64 | super.writeToParcel(dest, flags);
65 | dest.writeInt(drawableResId);
66 | }
67 |
68 | public static final Creator CREATOR = new Creator() {
69 |
70 | @Override
71 | public SelectableIcon createFromParcel(Parcel source) {
72 | return new SelectableIcon(source);
73 | }
74 |
75 | @Override
76 | public SelectableIcon[] newArray(int size) {
77 | return new SelectableIcon[size];
78 | }
79 | };
80 |
81 | }
82 |
--------------------------------------------------------------------------------
/selection-dialogs/src/main/java/pl/coreorb/selectiondialogs/data/SelectableItemNameComparator.java:
--------------------------------------------------------------------------------
1 | package pl.coreorb.selectiondialogs.data;
2 |
3 | import java.util.Comparator;
4 |
5 | /**
6 | * Class to compare name of item. Used to sort items by name in dialogs.
7 | */
8 | public class SelectableItemNameComparator implements Comparator {
9 |
10 | @Override
11 | public int compare(T o1, T o2) {
12 | return o1.getName().compareTo(o2.getName());
13 | }
14 |
15 | }
16 |
--------------------------------------------------------------------------------
/selection-dialogs/src/main/java/pl/coreorb/selectiondialogs/dialogs/ColorSelectDialog.java:
--------------------------------------------------------------------------------
1 | package pl.coreorb.selectiondialogs.dialogs;
2 |
3 | import android.app.Dialog;
4 | import android.content.Context;
5 | import android.content.DialogInterface;
6 | import android.os.Bundle;
7 | import android.support.annotation.ArrayRes;
8 | import android.support.annotation.NonNull;
9 | import android.support.annotation.Nullable;
10 | import android.support.annotation.StringRes;
11 | import android.support.v4.app.DialogFragment;
12 | import android.support.v4.content.ContextCompat;
13 | import android.support.v7.app.AlertDialog;
14 | import android.util.Log;
15 |
16 | import java.util.ArrayList;
17 | import java.util.Collections;
18 |
19 | import pl.coreorb.selectiondialogs.R;
20 | import pl.coreorb.selectiondialogs.data.SelectableColor;
21 | import pl.coreorb.selectiondialogs.data.SelectableItemNameComparator;
22 | import pl.coreorb.selectiondialogs.dialogs.adapters.ColorListAdapter;
23 | import pl.coreorb.selectiondialogs.utils.Utils;
24 |
25 | /**
26 | * Class defining Dialog for selecting colors.
27 | */
28 | public class ColorSelectDialog extends DialogFragment {
29 |
30 | private static final String LOG_TAG = ColorSelectDialog.class.getSimpleName();
31 |
32 | private static final String ARG_TITLE = "arg_title";
33 | private static final String ARG_ITEMS = "arg_items";
34 | private static final String ARG_SORT_BY_NAME = "arg_sort_by_name";
35 |
36 | private CharSequence mTitle;
37 | private ArrayList mSelectionDialogsItems;
38 | private boolean mSortByName;
39 | private OnColorSelectedListener mListener;
40 |
41 | /**
42 | * Class that will help you build colors selection dialog.
43 | */
44 | public static class Builder {
45 | private Context context;
46 | private Bundle bundle;
47 | private OnColorSelectedListener listener;
48 |
49 | public Builder(Context context) {
50 | this.context = context;
51 | bundle = new Bundle();
52 | }
53 |
54 | /**
55 | * Sets dialog's title. If no setTitle() method is used, default
56 | * {@link R.string#selectiondialogs_color_dialog_title} will be used
57 | * ("Select color..." translated to supported languages).
58 | * @param title text to set as dialog's title
59 | * @return this {@link Builder} to let methods chaining
60 | */
61 | public Builder setTitle(CharSequence title) {
62 | bundle.putCharSequence(ARG_TITLE, title);
63 | return this;
64 | }
65 |
66 | /**
67 | * Sets dialog's title. If no setTitle() method is used, default
68 | * {@link R.string#selectiondialogs_color_dialog_title} will be used
69 | * ("Select color..." translated to supported languages).
70 | * @param titleResId string resource ID to set as dialog's title
71 | * @return this {@link Builder} to let methods chaining
72 | */
73 | public Builder setTitle(@StringRes int titleResId) {
74 | bundle.putCharSequence(ARG_TITLE, context.getString(titleResId));
75 | return this;
76 | }
77 |
78 | /**
79 | * Changes sorting of colors in dialog. By default colors will not be sorted.
80 | * @param sort if true colors provided to dialog will be sorted by name,
81 | * otherwise list will be left as it is
82 | * @return this {@link Builder} to let methods chaining
83 | */
84 | public Builder setSortColorsByName(boolean sort) {
85 | bundle.putBoolean(ARG_SORT_BY_NAME, sort);
86 | return this;
87 | }
88 |
89 | /**
90 | * Sets listener to receive callbacks when color is selected.
91 | * @param listener listener which will receive callbacks
92 | * @return this {@link Builder} to let methods chaining
93 | */
94 | public Builder setOnColorSelectedListener(OnColorSelectedListener listener) {
95 | this.listener = listener;
96 | return this;
97 | }
98 |
99 | /**
100 | * Sets colors to display in dialog as available choices.
101 | * @param items ArrayList of colors to use
102 | * @return this {@link Builder} to let methods chaining
103 | */
104 | public Builder setColors(ArrayList items) {
105 | bundle.putParcelableArrayList(ARG_ITEMS, items);
106 | return this;
107 | }
108 |
109 | /**
110 | * Sets colors to display in dialog as available choices.
111 | * Note: all arrays must have equal lengths.
112 | * @param idsArray array resource id to use as colors ids
113 | * @param namesArray array resource id to use as colors names
114 | * @param colorsArray array resource id to use as colors, well color values
115 | * @return this {@link Builder} to let methods chaining
116 | */
117 | public Builder setColors(@ArrayRes int idsArray, @ArrayRes int namesArray, @ArrayRes int colorsArray) {
118 | return setColors(Utils.convertResourceArraysToColorsArrayList(context, false, idsArray, namesArray, colorsArray));
119 | }
120 |
121 | public ColorSelectDialog build() {
122 | ColorSelectDialog dialog = new ColorSelectDialog();
123 | dialog.setArguments(bundle);
124 | dialog.setOnColorSelectedListener(listener);
125 | return dialog;
126 | }
127 | }
128 |
129 | public void setOnColorSelectedListener(OnColorSelectedListener listener) {
130 | mListener = listener;
131 | }
132 |
133 | @Override
134 | public void onCreate(@Nullable Bundle savedInstanceState) {
135 | super.onCreate(savedInstanceState);
136 |
137 | Bundle args = getArguments();
138 | if (args != null && args.containsKey(ARG_TITLE)) {
139 | mTitle = args.getCharSequence(ARG_TITLE);
140 | } else {
141 | mTitle = getString(R.string.selectiondialogs_color_dialog_title);
142 | }
143 |
144 | if (args != null && args.containsKey(ARG_ITEMS)) {
145 | mSelectionDialogsItems = args.getParcelableArrayList(ARG_ITEMS);
146 | } else {
147 | Log.w(LOG_TAG, "No items provided! Creating default");
148 | mSelectionDialogsItems = new ArrayList<>();
149 | mSelectionDialogsItems.add(createDefaultItem());
150 | }
151 |
152 | if (args != null && args.containsKey(ARG_SORT_BY_NAME)) {
153 | mSortByName = args.getBoolean(ARG_SORT_BY_NAME);
154 | if (mSortByName) {
155 | Collections.sort(mSelectionDialogsItems, new SelectableItemNameComparator());
156 | }
157 | } else {
158 | mSortByName = false;
159 | }
160 |
161 | }
162 |
163 | @NonNull
164 | @Override
165 | public Dialog onCreateDialog(Bundle savedInstanceState) {
166 | AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
167 |
168 | builder.setTitle(mTitle);
169 | builder.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
170 | @Override
171 | public void onClick(DialogInterface dialog, int which) {
172 | dialog.dismiss();
173 | }
174 | });
175 |
176 | setUpListAdapter(builder);
177 |
178 | return builder.create();
179 | }
180 |
181 | /**
182 | * Creates default color in dialog when no colors are provided.
183 | * @return default color
184 | */
185 | private SelectableColor createDefaultItem() {
186 | return new SelectableColor(
187 | getContext().getString(R.string.selectiondialogs_undefined),
188 | getContext().getString(R.string.selectiondialogs_undefined),
189 | ContextCompat.getColor(getContext(), R.color.selectiondialogs_textSecondary));
190 | }
191 |
192 | /**
193 | * Sets up list adapter for color select dialog.
194 | * @param builder builder used for creating dialog
195 | */
196 | private void setUpListAdapter(AlertDialog.Builder builder) {
197 | ColorListAdapter adapter = new ColorListAdapter(getContext(), mSelectionDialogsItems);
198 | builder.setAdapter(adapter, new DialogInterface.OnClickListener() {
199 | @Override
200 | public void onClick(DialogInterface dialog, int which) {
201 | if (mListener != null) {
202 | mListener.onColorSelected(mSelectionDialogsItems.get(which));
203 | }
204 | }
205 | });
206 | }
207 |
208 | @Override
209 | public void onDestroyView() {
210 | super.onDestroyView();
211 | mListener = null;
212 | }
213 |
214 | /**
215 | * Listener to receive callbacks when color in dialog is selected.
216 | */
217 | public interface OnColorSelectedListener {
218 | /**
219 | * Called when color in dialog is being selected.
220 | * @param selectedItem selected {@link SelectableColor} object containing: id, name and color value.
221 | */
222 | void onColorSelected(SelectableColor selectedItem);
223 | }
224 | }
225 |
--------------------------------------------------------------------------------
/selection-dialogs/src/main/java/pl/coreorb/selectiondialogs/dialogs/IconSelectDialog.java:
--------------------------------------------------------------------------------
1 | package pl.coreorb.selectiondialogs.dialogs;
2 |
3 | import android.app.Dialog;
4 | import android.content.Context;
5 | import android.content.DialogInterface;
6 | import android.os.Bundle;
7 | import android.support.annotation.ArrayRes;
8 | import android.support.annotation.NonNull;
9 | import android.support.annotation.Nullable;
10 | import android.support.annotation.StringRes;
11 | import android.support.v4.app.DialogFragment;
12 | import android.support.v7.app.AlertDialog;
13 | import android.util.Log;
14 |
15 | import java.util.ArrayList;
16 | import java.util.Collections;
17 |
18 | import pl.coreorb.selectiondialogs.R;
19 | import pl.coreorb.selectiondialogs.data.SelectableIcon;
20 | import pl.coreorb.selectiondialogs.data.SelectableItemNameComparator;
21 | import pl.coreorb.selectiondialogs.dialogs.adapters.IconListAdapter;
22 | import pl.coreorb.selectiondialogs.utils.Utils;
23 |
24 | /**
25 | * Class defining Dialog for selecting icons.
26 | */
27 | public class IconSelectDialog extends DialogFragment {
28 |
29 | private static final String LOG_TAG = IconSelectDialog.class.getSimpleName();
30 |
31 | private static final String ARG_TITLE = "arg_title";
32 | private static final String ARG_ITEMS = "arg_items";
33 | private static final String ARG_SORT_BY_NAME = "arg_sort_by_name";
34 |
35 | private CharSequence mTitle;
36 | private ArrayList mSelectionDialogsItems;
37 | private boolean mSortByName;
38 | private OnIconSelectedListener mListener;
39 |
40 | /**
41 | * Class that will help you build colors selection dialog.
42 | */
43 | public static class Builder {
44 | private Context context;
45 | private Bundle bundle;
46 | private OnIconSelectedListener listener;
47 |
48 | public Builder(Context context) {
49 | this.context = context;
50 | bundle = new Bundle();
51 | }
52 |
53 | /**
54 | * Sets dialog's title. If no setTitle() method is used, default
55 | * {@link R.string#selectiondialogs_icon_dialog_title} will be used
56 | * ("Select icon..." translated to supported languages).
57 | * @param title text to set as dialog's title
58 | * @return this {@link Builder} to let methods chaining
59 | */
60 | public Builder setTitle(CharSequence title) {
61 | bundle.putCharSequence(ARG_TITLE, title);
62 | return this;
63 | }
64 |
65 | /**
66 | * Sets dialog's title. If no setTitle() method is used, default
67 | * {@link R.string#selectiondialogs_icon_dialog_title} will be used
68 | * ("Select icon..." translated to supported languages).
69 | * @param titleResId string resource ID to set as dialog's title
70 | * @return this {@link Builder} to let methods chaining
71 | */
72 | public Builder setTitle(@StringRes int titleResId) {
73 | bundle.putCharSequence(ARG_TITLE, context.getString(titleResId));
74 | return this;
75 | }
76 |
77 | /**
78 | * Changes sorting of icons in dialog. By default icons will not be sorted.
79 | * @param sort if true icons provided to dialog will be sorted by name,
80 | * otherwise list will be left as it is
81 | * @return this {@link Builder} to let methods chaining
82 | */
83 | public Builder setSortIconsByName(boolean sort) {
84 | bundle.putBoolean(ARG_SORT_BY_NAME, sort);
85 | return this;
86 | }
87 |
88 | /**
89 | * Sets listener to receive callbacks when icon is selected.
90 | * @param listener listener which will receive callbacks
91 | * @return this {@link Builder} to let methods chaining
92 | */
93 | public Builder setOnIconSelectedListener(OnIconSelectedListener listener) {
94 | this.listener = listener;
95 | return this;
96 | }
97 |
98 | /**
99 | * Sets icons to display in dialog as available choices.
100 | * @param items ArrayList of icons to use
101 | * @return this {@link Builder} to let methods chaining
102 | */
103 | public Builder setIcons(ArrayList items) {
104 | bundle.putParcelableArrayList(ARG_ITEMS, items);
105 | return this;
106 | }
107 |
108 | /**
109 | * Sets icons to display in dialog as available choices.
110 | * Note: all arrays must have equal lengths.
111 | * @param idsArray array resource id to use as icons ids
112 | * @param namesArray array resource id to use as icons names
113 | * @param drawablesArray array resource id to use as icons drawables
114 | * @return this {@link Builder} to let methods chaining
115 | */
116 | public Builder setIcons(@ArrayRes int idsArray, @ArrayRes int namesArray, @ArrayRes int drawablesArray) {
117 | return setIcons(Utils.convertResourceArraysToIconsArrayList(context, false, idsArray, namesArray, drawablesArray));
118 | }
119 |
120 | public IconSelectDialog build() {
121 | IconSelectDialog dialog = new IconSelectDialog();
122 | dialog.setArguments(bundle);
123 | dialog.setOnIconSelectedListener(listener);
124 | return dialog;
125 | }
126 |
127 | }
128 |
129 | public void setOnIconSelectedListener(OnIconSelectedListener listener) {
130 | mListener = listener;
131 | }
132 |
133 | @Override
134 | public void onCreate(@Nullable Bundle savedInstanceState) {
135 | super.onCreate(savedInstanceState);
136 |
137 | Bundle args = getArguments();
138 | if (args != null && args.containsKey(ARG_TITLE)) {
139 | mTitle = args.getCharSequence(ARG_TITLE);
140 | } else {
141 | mTitle = getString(R.string.selectiondialogs_color_dialog_title);
142 | }
143 |
144 | if (args != null && args.containsKey(ARG_ITEMS)) {
145 | mSelectionDialogsItems = args.getParcelableArrayList(ARG_ITEMS);
146 | } else {
147 | Log.w(LOG_TAG, "No items provided! Creating default");
148 | mSelectionDialogsItems = new ArrayList<>();
149 | mSelectionDialogsItems.add(createDefaultItem());
150 | }
151 |
152 | if (args != null && args.containsKey(ARG_SORT_BY_NAME)) {
153 | mSortByName = args.getBoolean(ARG_SORT_BY_NAME);
154 | if (mSortByName) {
155 | Collections.sort(mSelectionDialogsItems, new SelectableItemNameComparator());
156 | }
157 | } else {
158 | mSortByName = false;
159 | }
160 | }
161 |
162 | @NonNull
163 | @Override
164 | public Dialog onCreateDialog(Bundle savedInstanceState) {
165 | AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
166 |
167 | builder.setTitle(mTitle);
168 | builder.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
169 | @Override
170 | public void onClick(DialogInterface dialog, int which) {
171 | dialog.dismiss();
172 | }
173 | });
174 |
175 | setUpListAdapter(builder);
176 |
177 | return builder.create();
178 | }
179 |
180 | /**
181 | * Creates default icon in dialog when no icons are provided.
182 | * @return default icon
183 | */
184 | private SelectableIcon createDefaultItem() {
185 | return new SelectableIcon("default",
186 | getText(R.string.selectiondialogs_undefined).toString(),
187 | R.drawable.selectiondialogs_default_item_icon);
188 | }
189 |
190 | /**
191 | * Sets up list adapter for icon select dialog.
192 | * @param builder builder used for creating dialog
193 | */
194 | private void setUpListAdapter(AlertDialog.Builder builder) {
195 | IconListAdapter adapter = new IconListAdapter(getContext(), mSelectionDialogsItems);
196 | builder.setAdapter(adapter, new DialogInterface.OnClickListener() {
197 | @Override
198 | public void onClick(DialogInterface dialog, int which) {
199 | if (mListener != null) {
200 | mListener.onIconSelected(mSelectionDialogsItems.get(which));
201 | }
202 | }
203 | });
204 | }
205 |
206 | /**
207 | * Listener to receive callbacks when icon in dialog is selected.
208 | */
209 | public interface OnIconSelectedListener {
210 | /**
211 | * Called when icon in dialog is being selected.
212 | * @param selectedItem selected {@link SelectableIcon} object containing: id, name and drawable resource id.
213 | */
214 | void onIconSelected(SelectableIcon selectedItem);
215 | }
216 |
217 |
218 | }
219 |
--------------------------------------------------------------------------------
/selection-dialogs/src/main/java/pl/coreorb/selectiondialogs/dialogs/adapters/ColorListAdapter.java:
--------------------------------------------------------------------------------
1 | package pl.coreorb.selectiondialogs.dialogs.adapters;
2 |
3 | import android.content.Context;
4 | import android.view.LayoutInflater;
5 | import android.view.View;
6 | import android.view.ViewGroup;
7 | import android.widget.ArrayAdapter;
8 | import android.widget.ImageView;
9 | import android.widget.TextView;
10 |
11 | import java.util.ArrayList;
12 |
13 | import pl.coreorb.selectiondialogs.R;
14 | import pl.coreorb.selectiondialogs.data.SelectableColor;
15 |
16 | /**
17 | * Standard ArrayAdapter to use with ListViews for SelectableColor objects.
18 | */
19 | public class ColorListAdapter extends ArrayAdapter {
20 |
21 | public ColorListAdapter(Context context, ArrayList items) {
22 | super(context, R.layout.selectiondialogs_dialog_item, items);
23 | }
24 |
25 | @Override
26 | public View getView(int position, View convertView, ViewGroup parent) {
27 | View rootView = convertView;
28 |
29 | if (rootView == null) {
30 | LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
31 | rootView = inflater.inflate(R.layout.selectiondialogs_dialog_item, parent, false);
32 |
33 | ViewHolder viewHolder = new ViewHolder();
34 | viewHolder.iconIV = (ImageView) rootView.findViewById(R.id.selectiondialogs_icon_iv);
35 | viewHolder.nameTV = (TextView) rootView.findViewById(R.id.selectiondialogs_name_tv);
36 | rootView.setTag(viewHolder);
37 | }
38 |
39 | SelectableColor item = getItem(position);
40 | ViewHolder holder = (ViewHolder) rootView.getTag();
41 | holder.iconIV.setColorFilter(item.getColorValue());
42 | holder.nameTV.setText(item.getName());
43 |
44 | return rootView;
45 | }
46 |
47 | static class ViewHolder {
48 | public ImageView iconIV;
49 | public TextView nameTV;
50 | }
51 | }
52 |
--------------------------------------------------------------------------------
/selection-dialogs/src/main/java/pl/coreorb/selectiondialogs/dialogs/adapters/IconListAdapter.java:
--------------------------------------------------------------------------------
1 | package pl.coreorb.selectiondialogs.dialogs.adapters;
2 |
3 | import android.content.Context;
4 | import android.view.LayoutInflater;
5 | import android.view.View;
6 | import android.view.ViewGroup;
7 | import android.widget.ArrayAdapter;
8 | import android.widget.ImageView;
9 | import android.widget.TextView;
10 |
11 | import java.util.ArrayList;
12 |
13 | import pl.coreorb.selectiondialogs.R;
14 | import pl.coreorb.selectiondialogs.data.SelectableIcon;
15 |
16 | /**
17 | * Standard ArrayAdapter to use with ListViews for SelectableIcon objects.
18 | */
19 | public class IconListAdapter extends ArrayAdapter {
20 |
21 | public IconListAdapter(Context context, ArrayList selectionDialogsColors) {
22 | super(context, R.layout.selectiondialogs_dialog_item, selectionDialogsColors);
23 | }
24 |
25 | @Override
26 | public View getView(int position, View convertView, ViewGroup parent) {
27 | View rootView = convertView;
28 |
29 | if (rootView == null) {
30 | LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
31 | rootView = inflater.inflate(R.layout.selectiondialogs_dialog_item, parent, false);
32 |
33 | ViewHolder viewHolder = new ViewHolder();
34 | viewHolder.iconIV = (ImageView) rootView.findViewById(R.id.selectiondialogs_icon_iv);
35 | viewHolder.nameTV = (TextView) rootView.findViewById(R.id.selectiondialogs_name_tv);
36 | rootView.setTag(viewHolder);
37 | }
38 |
39 | SelectableIcon item = getItem(position);
40 | ViewHolder holder = (ViewHolder) rootView.getTag();
41 | holder.iconIV.setImageResource(item.getDrawableResId());
42 | holder.nameTV.setText(item.getName());
43 |
44 | return rootView;
45 | }
46 |
47 | static class ViewHolder {
48 | public ImageView iconIV;
49 | public TextView nameTV;
50 | }
51 | }
52 |
--------------------------------------------------------------------------------
/selection-dialogs/src/main/java/pl/coreorb/selectiondialogs/utils/ColorPalettes.java:
--------------------------------------------------------------------------------
1 | package pl.coreorb.selectiondialogs.utils;
2 |
3 | import android.content.Context;
4 |
5 | import java.util.ArrayList;
6 |
7 | import pl.coreorb.selectiondialogs.R;
8 | import pl.coreorb.selectiondialogs.data.SelectableColor;
9 |
10 | /**
11 | * Class containing methods with predefined color palettes.
12 | */
13 | public class ColorPalettes {
14 |
15 | /**
16 | * Creates default Material Design colors (500 - primary) as ArrayList. Colors can be sorted by name at runtime, note that colors will be sorted in language displays to user.
17 | *
18 | * @param context current context
19 | * @param sortByName if true colors will be sorted by name, otherwise colors will be left as they are
20 | * @return ArrayList of Material Desing colors as {@link SelectableColor}
21 | */
22 | public static ArrayList loadMaterialDesignColors500(Context context, boolean sortByName) {
23 | return Utils.convertResourceArraysToColorsArrayList(context,
24 | sortByName,
25 | R.array.selectiondialogs_materialdesign500_ids,
26 | R.array.selectiondialogs_materialdesign500_names,
27 | R.array.selectiondialogs_materialdesign500_colors);
28 | }
29 |
30 |
31 | }
32 |
--------------------------------------------------------------------------------
/selection-dialogs/src/main/java/pl/coreorb/selectiondialogs/utils/Utils.java:
--------------------------------------------------------------------------------
1 | package pl.coreorb.selectiondialogs.utils;
2 |
3 | import android.content.Context;
4 | import android.support.annotation.ArrayRes;
5 | import android.util.Log;
6 |
7 | import java.util.ArrayList;
8 | import java.util.Collections;
9 |
10 | import pl.coreorb.selectiondialogs.data.SelectableColor;
11 | import pl.coreorb.selectiondialogs.data.SelectableIcon;
12 | import pl.coreorb.selectiondialogs.data.SelectableItemNameComparator;
13 |
14 | /**
15 | * Class with util methods.
16 | */
17 | public class Utils {
18 |
19 | private static final String LOG_TAG = Utils.class.getSimpleName();
20 |
21 | /**
22 | * Converts 3 resource arrays to ArrayList of colors. Colors can be sorted by name at runtime, note that colors will be sorted in language displays to user.
23 | * Note: all arrays must have equal lengths.
24 | *
25 | * @param context current context
26 | * @param sortByName if true colors will be sorted by name, otherwise colors will be left as they are
27 | * @param idsArray array resource id to use as colors ids
28 | * @param namesArray array resource id to use as colors names
29 | * @param colorsArray array resource id to use as colors, well color values
30 | * @return colors ArrayList
31 | */
32 | public static ArrayList convertResourceArraysToColorsArrayList(Context context, boolean sortByName, @ArrayRes int idsArray, @ArrayRes int namesArray, @ArrayRes int colorsArray) {
33 | //get and check arrays
34 | String[] ids = context.getResources().getStringArray(idsArray);
35 | int[] colors = context.getResources().getIntArray(colorsArray);
36 | String[] names = context.getResources().getStringArray(namesArray);
37 |
38 | if (ids.length != colors.length && ids.length != names.length) {
39 | Log.e(LOG_TAG, "convertResourceArraysToColorsArrayList(): Arrays must have equals lengths!");
40 | return null;
41 | }
42 |
43 | //create ArrayList
44 | ArrayList result = new ArrayList<>();
45 | for (int i = 0; i < ids.length; i++) {
46 | result.add(new SelectableColor(ids[i], names[i], colors[i]));
47 | }
48 |
49 | //sort by names
50 | if (sortByName) {
51 | Collections.sort(result, new SelectableItemNameComparator());
52 | }
53 |
54 | return result;
55 | }
56 |
57 | /**
58 | * Converts 3 resource arrays to ArrayList of icons. Icons can be sorted by name at runtime, note that icons will be sorted in language displays to user.
59 | * Note: all arrays must have equal lengths.
60 | *
61 | * @param context current context
62 | * @param sortByName if true colors will be sorted by name, otherwise colors will be left as they are
63 | * @param idsArray array resource id to use as icons ids
64 | * @param namesArray array resource id to use as icons names
65 | * @param drawablesArray array resource id to use as icons drawables
66 | * @return icons ArrayList
67 | */
68 | public static ArrayList convertResourceArraysToIconsArrayList(Context context, boolean sortByName, @ArrayRes int idsArray, @ArrayRes int namesArray, @ArrayRes int drawablesArray) {
69 | //get and check arrays
70 | String[] ids = context.getResources().getStringArray(idsArray);
71 | int[] drawables = context.getResources().getIntArray(drawablesArray);
72 | String[] names = context.getResources().getStringArray(namesArray);
73 |
74 | if (ids.length != drawables.length && ids.length != names.length) {
75 | Log.e(LOG_TAG, "convertResourceArraysToIconsArrayList(): Arrays must have equals lengths!");
76 | return null;
77 | }
78 |
79 | //create ArrayList
80 | ArrayList result = new ArrayList<>();
81 | for (int i = 0; i < ids.length; i++) {
82 | result.add(new SelectableIcon(ids[i], names[i], drawables[i]));
83 | }
84 |
85 | //sort by names
86 | if (sortByName) {
87 | Collections.sort(result, new SelectableItemNameComparator());
88 | }
89 |
90 | return result;
91 | }
92 |
93 | }
94 |
--------------------------------------------------------------------------------
/selection-dialogs/src/main/java/pl/coreorb/selectiondialogs/views/SelectedItemView.java:
--------------------------------------------------------------------------------
1 | package pl.coreorb.selectiondialogs.views;
2 |
3 | import android.content.Context;
4 | import android.content.res.TypedArray;
5 | import android.os.Parcel;
6 | import android.os.Parcelable;
7 | import android.support.annotation.ColorInt;
8 | import android.support.annotation.DrawableRes;
9 | import android.support.annotation.StringRes;
10 | import android.support.v4.content.ContextCompat;
11 | import android.util.AttributeSet;
12 | import android.util.Log;
13 | import android.view.LayoutInflater;
14 | import android.view.View;
15 | import android.widget.ImageView;
16 | import android.widget.LinearLayout;
17 | import android.widget.RelativeLayout;
18 | import android.widget.TextView;
19 |
20 | import pl.coreorb.selectiondialogs.R;
21 | import pl.coreorb.selectiondialogs.data.SelectableColor;
22 | import pl.coreorb.selectiondialogs.data.SelectableIcon;
23 |
24 | /**
25 | * View class used to display selected item (icon, color or text) from this library dialogs.
26 | */
27 | public class SelectedItemView extends LinearLayout {
28 |
29 | private static String TAG = SelectedItemView.class.getSimpleName();
30 |
31 | private TextView hintTV;
32 | private RelativeLayout buttonRL;
33 | private TextView nameTV;
34 | private ImageView iconIV;
35 |
36 | private String currentHint;
37 | private String currentItemId;
38 | private String currentItemName;
39 | private
40 | @DrawableRes
41 | int currentItemIcon;
42 | private
43 | @ColorInt
44 | int currentItemColor;
45 |
46 | public SelectedItemView(Context context) {
47 | this(context, null);
48 | }
49 |
50 | public SelectedItemView(Context context, int id) {
51 | this(context, null, id);
52 | }
53 |
54 | public SelectedItemView(Context context, AttributeSet attrs) {
55 | this(context, attrs, null);
56 | }
57 |
58 | public SelectedItemView(Context context, AttributeSet attrs, Integer id) {
59 | super(context, attrs);
60 | if (id != null) this.setId(id);
61 |
62 | Log.d(TAG, "SelectedItemView() [id: " + getId() + "]");
63 |
64 | //get style of view
65 | TypedArray a = context.obtainStyledAttributes(attrs,
66 | R.styleable.SelectedItemView, 0, 0);
67 | String hint = a.getString(R.styleable.SelectedItemView_hint);
68 | String itemId = a.getString(R.styleable.SelectedItemView_itemId);
69 | int itemIcon = a.getResourceId(R.styleable.SelectedItemView_itemIcon, -1);
70 | int itemColor = a.getInt(R.styleable.SelectedItemView_itemColor, -1);
71 | String itemName = a.getString(R.styleable.SelectedItemView_itemName);
72 | a.recycle();
73 |
74 | //inflate and find child views
75 | LayoutInflater inflater = (LayoutInflater) context
76 | .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
77 | View rootView = inflater.inflate(R.layout.selectiondialogs_selected_item_view, this, true);
78 |
79 | hintTV = (TextView) rootView.findViewById(R.id.selectiondialogs_hint_tv);
80 | buttonRL = (RelativeLayout) rootView.findViewById(R.id.selectiondialogs_button_ll);
81 | nameTV = (TextView) rootView.findViewById(R.id.selectiondialogs_name_tv);
82 | iconIV = (ImageView) rootView.findViewById(R.id.selectiondialogs_icon_iv);
83 |
84 | //update views and set up initial values for current variables
85 | if (hint != null) {
86 | hintTV.setText(hint);
87 | currentHint = hint;
88 | } else {
89 | currentHint = getResources().getString(R.string.selectiondialogs_default_hint);
90 | }
91 |
92 | if (itemId != null) {
93 | currentItemId = itemId;
94 | } else {
95 | currentItemId = getResources().getString(R.string.selectiondialogs_default_item_id);
96 | }
97 |
98 | if (itemName != null) {
99 | nameTV.setText(itemName);
100 | currentItemName = itemName;
101 | } else {
102 | currentItemName = getResources().getString(R.string.selectiondialogs_default_item_name);
103 | }
104 |
105 | if (itemIcon != -1) {
106 | iconIV.setImageResource(itemIcon);
107 | currentItemIcon = itemIcon;
108 | } else {
109 | currentItemIcon = R.drawable.selectiondialogs_default_item_icon;
110 | }
111 |
112 | if (itemColor != -1) {
113 | iconIV.setColorFilter(itemColor);
114 | currentItemColor = itemColor;
115 | } else {
116 | currentItemColor = ContextCompat.getColor(context, R.color.selectiondialogs_default_item_color);
117 | }
118 | }
119 |
120 | /**
121 | * Sets listener to call when button is being clicked.
122 | *
123 | * @param onClickListener listener to use
124 | */
125 | public void setOnClickListener(OnClickListener onClickListener) {
126 | buttonRL.setOnClickListener(onClickListener);
127 | }
128 |
129 | /**
130 | * Sets hint displayed above button.
131 | *
132 | * @param hint hint to display
133 | */
134 | public void setHint(String hint) {
135 | currentHint = hint;
136 | hintTV.setText(hint);
137 | }
138 |
139 | /**
140 | * Sets hint displayed above button.
141 | *
142 | * @param hintResId resource id of string to use as a hint
143 | */
144 | public void setHint(@StringRes int hintResId) {
145 | currentHint = getResources().getString(hintResId);
146 | hintTV.setText(hintResId);
147 | }
148 |
149 | /**
150 | * Returns hint displayed above button.
151 | *
152 | * @return hint displayed above button
153 | */
154 | public String getHint() {
155 | return currentHint;
156 | }
157 |
158 | /**
159 | * Sets name of currently displayed item.
160 | *
161 | * @param name name of currently displayed item
162 | */
163 | public void setSelectedName(String name) {
164 | currentItemName = name;
165 | nameTV.setText(name);
166 | }
167 |
168 | /**
169 | * Sets name of currently displayed item.
170 | *
171 | * @param nameResId resource id of string to use as name of currently displayed item
172 | */
173 | public void setSelectedName(@StringRes int nameResId) {
174 | currentItemName = getResources().getString(nameResId);
175 | nameTV.setText(nameResId);
176 | }
177 |
178 | /**
179 | * Returns currently displayed name of item selected.
180 | *
181 | * @return name of item selected
182 | */
183 | public String getSelectedName() {
184 | return currentItemName;
185 | }
186 |
187 | /**
188 | * Sets currently displayed icon.
189 | *
190 | * @param icon icon to display
191 | */
192 | public void setSelectedIcon(SelectableIcon icon) {
193 | currentItemId = icon.getId();
194 | currentItemName = icon.getName();
195 | currentItemIcon = icon.getDrawableResId();
196 |
197 | iconIV.setImageResource(icon.getDrawableResId());
198 | nameTV.setText(icon.getName());
199 | }
200 |
201 | /**
202 | * Returns currently displayed icon.
203 | *
204 | * @return currently displayed icon
205 | */
206 | public SelectableIcon getSelectedIcon() {
207 | return new SelectableIcon(currentItemId, currentItemName, currentItemIcon);
208 |
209 | }
210 |
211 | /**
212 | * Sets currently displayed color.
213 | *
214 | * @param color color to display
215 | */
216 | public void setSelectedColor(SelectableColor color) {
217 | currentItemId = color.getId();
218 | currentItemName = color.getName();
219 | currentItemColor = color.getColorValue();
220 |
221 | iconIV.setColorFilter(color.getColorValue());
222 | nameTV.setText(color.getName());
223 | }
224 |
225 | /**
226 | * Returns currently displayed color.
227 | *
228 | * @return currently displayed color
229 | */
230 | public SelectableColor getSelectedColor() {
231 | return new SelectableColor(currentItemId, currentItemName, currentItemColor);
232 |
233 | }
234 |
235 | @Override
236 | protected Parcelable onSaveInstanceState() {
237 | Parcelable superState = super.onSaveInstanceState();
238 | Log.d(TAG, "onSaveInstanceState() [id: " + getId() + "]");
239 | SavedState ss = new SavedState(superState);
240 | ss.hint = currentHint;
241 | ss.id = currentItemId;
242 | ss.name = currentItemName;
243 | ss.iconDrawableResId = currentItemIcon;
244 | ss.iconColorValue = currentItemColor;
245 | return ss;
246 | }
247 |
248 | @Override
249 | protected void onRestoreInstanceState(Parcelable state) {
250 | if (!(state instanceof SavedState)) {
251 | super.onRestoreInstanceState(state);
252 | return;
253 | }
254 | Log.d(TAG, "onRestoreInstanceState() [id: " + getId() + "]");
255 | SavedState ss = (SavedState) state;
256 |
257 | currentHint = ss.hint;
258 | currentItemId = ss.id;
259 | currentItemName = ss.name;
260 | currentItemIcon = ss.iconDrawableResId;
261 | currentItemColor = ss.iconColorValue;
262 |
263 | hintTV.setText(currentHint);
264 | nameTV.setText(currentItemName);
265 | iconIV.setImageResource(currentItemIcon);
266 | iconIV.setColorFilter(currentItemColor);
267 |
268 | super.onRestoreInstanceState(ss.getSuperState());
269 | }
270 |
271 | static class SavedState extends BaseSavedState {
272 | String hint;
273 | String id;
274 | String name;
275 | Integer iconDrawableResId;
276 | Integer iconColorValue;
277 |
278 | SavedState(Parcelable superState) {
279 | super(superState);
280 | }
281 |
282 | private SavedState(Parcel in) {
283 | super(in);
284 | this.id = in.readString();
285 | this.name = in.readString();
286 | this.iconDrawableResId = in.readInt();
287 | this.iconColorValue = in.readInt();
288 | }
289 |
290 | @Override
291 | public void writeToParcel(Parcel out, int flags) {
292 | super.writeToParcel(out, flags);
293 | out.writeString(this.id);
294 | out.writeString(this.name);
295 | out.writeInt(this.iconDrawableResId);
296 | out.writeInt(this.iconColorValue);
297 | }
298 |
299 | public static final Creator CREATOR =
300 | new Creator() {
301 | public SavedState createFromParcel(Parcel in) {
302 | return new SavedState(in);
303 | }
304 |
305 | public SavedState[] newArray(int size) {
306 | return new SavedState[size];
307 | }
308 | };
309 | }
310 |
311 | }
312 |
--------------------------------------------------------------------------------
/selection-dialogs/src/main/res/drawable/selectiondialogs_default_item_icon.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/selection-dialogs/src/main/res/layout/selectiondialogs_dialog_item.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
12 |
13 |
22 |
23 |
32 |
33 |
34 |
35 |
--------------------------------------------------------------------------------
/selection-dialogs/src/main/res/layout/selectiondialogs_selected_item_view.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
16 |
17 |
20 |
21 |
26 |
27 |
36 |
37 |
46 |
47 |
48 |
49 |
50 |
51 |
--------------------------------------------------------------------------------
/selection-dialogs/src/main/res/values-pl/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Selection Dialogs
5 |
6 |
7 | Wybierz ikonę…
8 | Wybierz kolor…
9 |
10 |
11 | podpowiedź
12 | tekst
13 |
14 |
15 | Czerwony
16 | Różowy
17 | Fioletowy
18 | Głęboki fiolet
19 | Indygo
20 | Niebieski
21 | Jasny niebieski
22 | Niebieskozielony
23 | Turkusowy
24 | Zielony
25 | Jasny zielony
26 | Limonkowy
27 | Żółty
28 | Bursztynowy
29 | Pomarańczowy
30 | Głęboka pomarańcz
31 | Brązowy
32 | Szary
33 | Niebiesko-szary
34 |
35 |
36 | #undefined#
37 |
38 |
--------------------------------------------------------------------------------
/selection-dialogs/src/main/res/values/arrays.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | - @color/selectiondialogs_materialdesign500_red
6 | - @color/selectiondialogs_materialdesign500_pink
7 | - @color/selectiondialogs_materialdesign500_purple
8 | - @color/selectiondialogs_materialdesign500_deep_purple
9 | - @color/selectiondialogs_materialdesign500_indigo
10 | - @color/selectiondialogs_materialdesign500_blue
11 | - @color/selectiondialogs_materialdesign500_light_blue
12 | - @color/selectiondialogs_materialdesign500_cyan
13 | - @color/selectiondialogs_materialdesign500_teal
14 | - @color/selectiondialogs_materialdesign500_green
15 | - @color/selectiondialogs_materialdesign500_light_green
16 | - @color/selectiondialogs_materialdesign500_lime
17 | - @color/selectiondialogs_materialdesign500_yellow
18 | - @color/selectiondialogs_materialdesign500_amber
19 | - @color/selectiondialogs_materialdesign500_orange
20 | - @color/selectiondialogs_materialdesign500_deep_orange
21 | - @color/selectiondialogs_materialdesign500_brown
22 | - @color/selectiondialogs_materialdesign500_grey
23 | - @color/selectiondialogs_materialdesign500_blue_grey
24 |
25 |
26 |
27 | - @string/selectiondialogs_materialdesign500_red
28 | - @string/selectiondialogs_materialdesign500_pink
29 | - @string/selectiondialogs_materialdesign500_purple
30 | - @string/selectiondialogs_materialdesign500_deep_purple
31 | - @string/selectiondialogs_materialdesign500_indigo
32 | - @string/selectiondialogs_materialdesign500_blue
33 | - @string/selectiondialogs_materialdesign500_light_blue
34 | - @string/selectiondialogs_materialdesign500_cyan
35 | - @string/selectiondialogs_materialdesign500_teal
36 | - @string/selectiondialogs_materialdesign500_green
37 | - @string/selectiondialogs_materialdesign500_light_green
38 | - @string/selectiondialogs_materialdesign500_lime
39 | - @string/selectiondialogs_materialdesign500_yellow
40 | - @string/selectiondialogs_materialdesign500_amber
41 | - @string/selectiondialogs_materialdesign500_orange
42 | - @string/selectiondialogs_materialdesign500_deep_orange
43 | - @string/selectiondialogs_materialdesign500_brown
44 | - @string/selectiondialogs_materialdesign500_grey
45 | - @string/selectiondialogs_materialdesign500_blue_grey
46 |
47 |
48 |
49 | - @string/selectiondialogs_materialdesign500_id_red
50 | - @string/selectiondialogs_materialdesign500_id_pink
51 | - @string/selectiondialogs_materialdesign500_id_purple
52 | - @string/selectiondialogs_materialdesign500_id_deep_purple
53 | - @string/selectiondialogs_materialdesign500_id_indigo
54 | - @string/selectiondialogs_materialdesign500_id_blue
55 | - @string/selectiondialogs_materialdesign500_id_light_blue
56 | - @string/selectiondialogs_materialdesign500_id_cyan
57 | - @string/selectiondialogs_materialdesign500_id_teal
58 | - @string/selectiondialogs_materialdesign500_id_green
59 | - @string/selectiondialogs_materialdesign500_id_light_green
60 | - @string/selectiondialogs_materialdesign500_id_lime
61 | - @string/selectiondialogs_materialdesign500_id_yellow
62 | - @string/selectiondialogs_materialdesign500_id_amber
63 | - @string/selectiondialogs_materialdesign500_id_orange
64 | - @string/selectiondialogs_materialdesign500_id_deep_orange
65 | - @string/selectiondialogs_materialdesign500_id_brown
66 | - @string/selectiondialogs_materialdesign500_id_grey
67 | - @string/selectiondialogs_materialdesign500_id_blue_grey
68 |
69 |
70 |
--------------------------------------------------------------------------------
/selection-dialogs/src/main/res/values/attrs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/selection-dialogs/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | #757575
5 |
6 | #212121
7 | #757575
8 | #9e9e9e
9 |
10 | #F44336
11 | #FF4081
12 | #9C27B0
13 | #7C4DFF
14 | #3F51B5
15 | #448AFF
16 | #03A9F4
17 | #00BCD4
18 | #009688
19 | #4CAF50
20 | #8BC34A
21 | #CDDC39
22 | #FFEB3B
23 | #FFC107
24 | #FF9800
25 | #FF5722
26 | #795548
27 | #9E9E9E
28 | #607D8B
29 |
30 |
--------------------------------------------------------------------------------
/selection-dialogs/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 | Selection Dialogs
3 |
4 |
5 | Select icon…
6 | Select color…
7 |
8 |
9 | hint
10 | text
11 | no_id
12 |
13 |
14 | Red
15 | Pink
16 | Purple
17 | Deep Purple
18 | Indigo
19 | Blue
20 | Light Blue
21 | Cyan
22 | Teal
23 | Green
24 | Light Green
25 | Lime
26 | Yellow
27 | Amber
28 | Orange
29 | Deep Orange
30 | Brown
31 | Gray
32 | Blue Gray
33 |
34 |
35 | red
36 | pink
37 | purple
38 | deeppurple
39 | indigo
40 | blue
41 | lightblue
42 | cyan
43 | teal
44 | green
45 | lightgreen
46 | lime
47 | yellow
48 | amber
49 | orange
50 | deeporange
51 | brown
52 | gray
53 | bluegray
54 |
55 |
56 | #undefined#
57 |
58 |
--------------------------------------------------------------------------------
/selection-dialogs/src/test/java/pl/coreorb/selectiondialogs/ExampleUnitTest.java:
--------------------------------------------------------------------------------
1 | package pl.coreorb.selectiondialogs;
2 |
3 | import org.junit.Test;
4 |
5 | import static org.junit.Assert.assertEquals;
6 |
7 | /**
8 | * To work on unit tests, switch the Test Artifact in the Build Variants view.
9 | */
10 | public class ExampleUnitTest {
11 | @Test
12 | public void addition_isCorrect() throws Exception {
13 | assertEquals(4, 2 + 2);
14 | }
15 | }
--------------------------------------------------------------------------------
/settings.gradle:
--------------------------------------------------------------------------------
1 | include ':sample', ':selection-dialogs'
2 |
--------------------------------------------------------------------------------