Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Side by Side Diff: mobile/android/thirdparty/org/adblockplus/browser/UrlInputDialog.java

Issue 29322610: Issue 2720 - [Adblocking settings] Add the other filter lists category (Closed)
Patch Set: Last naming nit Created July 31, 2015, 9:36 a.m.
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 /*
2 * This file is part of Adblock Plus <https://adblockplus.org/>,
3 * Copyright (C) 2006-2015 Eyeo GmbH
4 *
5 * Adblock Plus is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License version 3 as
7 * published by the Free Software Foundation.
8 *
9 * Adblock Plus is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18 package org.adblockplus.browser;
19
20 import org.mozilla.gecko.R;
21
22 import android.app.Dialog;
23 import android.content.Context;
24 import android.os.Bundle;
25 import android.text.Editable;
26 import android.text.TextWatcher;
27 import android.util.Patterns;
28 import android.view.KeyEvent;
29 import android.view.View;
30 import android.view.View.OnClickListener;
31 import android.view.inputmethod.EditorInfo;
32 import android.widget.Button;
33 import android.widget.EditText;
34 import android.widget.TextView;
35 import android.widget.TextView.OnEditorActionListener;
36
37 public class UrlInputDialog extends Dialog implements TextWatcher,
38 OnEditorActionListener, OnClickListener
39 {
40 private final Type type;
41 private final UrlReadyCallback callback;
42
43 private EditText editText = null;
44 private Button button = null;
45
46 private boolean submitEnabled = false;
47 private boolean triedSubmit = false;
48 private String currentEditTextValue = null;
49
50 public enum Type
51 {
52 ADD_SUBSCRIPTION,
53 ADD_WHITELISTED_SITE
54 }
55
56 public UrlInputDialog(final Context context, final Type type, final UrlReadyCa llback callback)
57 {
58 super(context);
59 this.type = type;
60 this.callback = callback;
61 }
62
63 @Override
64 protected void onCreate(final Bundle savedInstanceState)
65 {
66 super.onCreate(savedInstanceState);
67 this.setContentView(R.layout.abb_url_input_dialog);
68
69 this.editText = (EditText) this.findViewById(R.id.abb_listadd_textinput);
70 this.button = (Button) this.findViewById(R.id.abb_listadd_button);
71
72 this.setCanceledOnTouchOutside(true);
73 this.setCancelable(true);
74
75 this.editText.addTextChangedListener(this);
76 this.editText.setOnEditorActionListener(this);
77 this.editText.requestFocus();
78
79 this.button.setOnClickListener(this);
80
81 if (this.currentEditTextValue != null)
82 {
83 this.editText.setText(this.currentEditTextValue);
84 }
85 this.updateButtonState();
86
87 switch (this.type)
88 {
89 case ADD_SUBSCRIPTION:
90 this.button.setText(R.string.abb_add_subscription_button);
91 this.editText.setHint(R.string.abb_add_subscription_url);
92 this.setTitle(R.string.abb_pref_category_add_other_list);
93 break;
94 default:
95 break;
96 }
97 }
98
99 private void updateButtonState()
100 {
101 this.button.setEnabled(this.submitEnabled);
102 this.button.setBackgroundColor(this.submitEnabled
103 ? this.getContext().getResources().getColor(R.color.abb_url_input_button _enabled)
104 : this.getContext().getResources().getColor(R.color.abb_url_input_button _disabled));
105 this.button.invalidate();
106 }
107
108 @Override
109 public void afterTextChanged(final Editable s)
110 {
111 this.currentEditTextValue = s.toString();
112 this.submitEnabled = this.validateUrl(this.currentEditTextValue) != null;
113 if (this.submitEnabled)
114 {
115 this.editText.setError(null);
116 }
117 else if (this.triedSubmit)
118 {
119 this.editText.setError(this.getContext().getString(R.string.abb_invalid_ur l));
120 }
121 this.updateButtonState();
122 }
123
124 @Override
125 public void beforeTextChanged(final CharSequence s, final int start, final int count,
126 final int after)
127 {
128 // ignored
129 }
130
131 @Override
132 public void onTextChanged(final CharSequence s, final int start, final int bef ore, final int count)
133 {
134 // ignored
135 }
136
137 private String validateUrl(final String possibleUrl)
138 {
139 String url = possibleUrl.trim();
140 if (Patterns.WEB_URL.matcher(url).matches())
141 {
142 return url;
143 }
144 url = "http://" + url;
145 if (Patterns.WEB_URL.matcher(url).matches())
146 {
147 return url;
148 }
149 return null;
150 }
151
152 private void validateAndSubmit(final String inputText)
153 {
154 final String url = this.validateUrl(inputText);
155 this.triedSubmit = true;
156 if (url == null)
157 {
158 this.editText.setError(this.getContext().getString(R.string.abb_invalid_ur l));
159 }
160 else
161 {
162 this.editText.setError(null);
163 this.dismiss();
164 this.callback.callback(url);
165 }
166 }
167
168 @Override
169 public boolean onEditorAction(final TextView v, final int actionId, final KeyE vent event)
170 {
171 if (actionId == EditorInfo.IME_ACTION_DONE)
172 {
173 if (this.currentEditTextValue != null)
174 {
175 this.validateAndSubmit(this.currentEditTextValue);
176 }
177 return true;
178 }
179 return false;
180 }
181
182 public interface UrlReadyCallback
183 {
184 public void callback(String url);
185 }
186
187 @Override
188 public void onClick(final View v)
189 {
190 if (this.currentEditTextValue != null)
191 {
192 this.validateAndSubmit(this.currentEditTextValue);
193 }
194 }
195 }
OLDNEW

Powered by Google App Engine
This is Rietveld