| OLD | NEW | 
| (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 } | 
| OLD | NEW |