created enter phone number activity
This commit is contained in:
		
							parent
							
								
									f10f3730e1
								
							
						
					
					
						commit
						7a3ba3e375
					
				| @ -23,6 +23,7 @@ configurations { | |||||||
|     compatImplementation |     compatImplementation | ||||||
|     fullFreeCompatImplementation |     fullFreeCompatImplementation | ||||||
|     quickFreeCompatImplementation |     quickFreeCompatImplementation | ||||||
|  |     quickImplementation | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| ext { | ext { | ||||||
| @ -59,6 +60,7 @@ dependencies { | |||||||
|     implementation 'org.osmdroid:osmdroid-android:6.0.1' |     implementation 'org.osmdroid:osmdroid-android:6.0.1' | ||||||
|     implementation 'org.hsluv:hsluv:0.2' |     implementation 'org.hsluv:hsluv:0.2' | ||||||
|     implementation 'org.conscrypt:conscrypt-android:1.3.0' |     implementation 'org.conscrypt:conscrypt-android:1.3.0' | ||||||
|  |     quickImplementation 'io.michaelrocks:libphonenumber-android:8.9.14' | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| ext { | ext { | ||||||
|  | |||||||
| @ -750,4 +750,12 @@ | |||||||
|     <string name="cancelled">cancelled</string> |     <string name="cancelled">cancelled</string> | ||||||
|     <string name="already_drafting_message">You are already drafting a message.</string> |     <string name="already_drafting_message">You are already drafting a message.</string> | ||||||
|     <string name="feature_not_implemented">Feature not implemented</string> |     <string name="feature_not_implemented">Feature not implemented</string> | ||||||
|  |     <string name="invalid_country_code">Invalid country code</string> | ||||||
|  |     <string name="choose_a_country">Choose a country</string> | ||||||
|  |     <string name="phone_number">phone number</string> | ||||||
|  |     <string name="verify_your_phone_number">Verify your phone number</string> | ||||||
|  |     <string name="enter_country_code_and_phone_number">Quick Conversations will send an SMS message (carrier charges may apply) to verify your phone number. Enter your country code and phone number:</string> | ||||||
|  |     <string name="we_will_be_verifying"><![CDATA[We will be verifying the phone number<br/><br/><b>%s</b><br/><br/>Is this OK, or would you like to edit the number?]]></string> | ||||||
|  |     <string name="not_a_valid_phone_number">%s is not a valid phone number.</string> | ||||||
|  |     <string name="please_enter_your_phone_number">Please enter your phone number.</string> | ||||||
| </resources> | </resources> | ||||||
|  | |||||||
							
								
								
									
										13
									
								
								src/quick/AndroidManifest.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								src/quick/AndroidManifest.xml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,13 @@ | |||||||
|  | <?xml version="1.0" encoding="utf-8"?> | ||||||
|  | <manifest xmlns:android="http://schemas.android.com/apk/res/android" | ||||||
|  |     xmlns:tools="http://schemas.android.com/tools" | ||||||
|  |     package="eu.siacs.conversations"> | ||||||
|  | 
 | ||||||
|  |     <application tools:ignore="GoogleAppIndexingWarning"> | ||||||
|  |         <activity | ||||||
|  |             android:name=".ui.EnterPhoneNumberActivity" | ||||||
|  |             android:label="@string/verify_your_phone_number" | ||||||
|  |             android:launchMode="singleTask" /> | ||||||
|  | 
 | ||||||
|  |     </application> | ||||||
|  | </manifest> | ||||||
| @ -0,0 +1,107 @@ | |||||||
|  | package eu.siacs.conversations.ui; | ||||||
|  | 
 | ||||||
|  | import android.app.AlertDialog; | ||||||
|  | import android.databinding.DataBindingUtil; | ||||||
|  | import android.os.Bundle; | ||||||
|  | import android.support.v7.app.AppCompatActivity; | ||||||
|  | import android.support.v7.widget.Toolbar; | ||||||
|  | import android.text.Editable; | ||||||
|  | import android.text.Html; | ||||||
|  | import android.text.TextUtils; | ||||||
|  | import android.text.TextWatcher; | ||||||
|  | import android.util.Log; | ||||||
|  | import android.view.View; | ||||||
|  | 
 | ||||||
|  | import eu.siacs.conversations.Config; | ||||||
|  | import eu.siacs.conversations.R; | ||||||
|  | import eu.siacs.conversations.databinding.ActivityEnterNumberBinding; | ||||||
|  | import eu.siacs.conversations.ui.drawable.TextDrawable; | ||||||
|  | import eu.siacs.conversations.utils.PhoneNumberUtilWrapper; | ||||||
|  | import io.michaelrocks.libphonenumber.android.NumberParseException; | ||||||
|  | import io.michaelrocks.libphonenumber.android.PhoneNumberUtil; | ||||||
|  | import io.michaelrocks.libphonenumber.android.Phonenumber; | ||||||
|  | 
 | ||||||
|  | public class EnterPhoneNumberActivity extends AppCompatActivity { | ||||||
|  | 
 | ||||||
|  |     private ActivityEnterNumberBinding binding; | ||||||
|  |     private String region = null; | ||||||
|  |     private final TextWatcher countryCodeTextWatcher = new TextWatcher() { | ||||||
|  |         @Override | ||||||
|  |         public void beforeTextChanged(CharSequence s, int start, int count, int after) { | ||||||
|  | 
 | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         @Override | ||||||
|  |         public void onTextChanged(CharSequence s, int start, int before, int count) { | ||||||
|  | 
 | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         @Override | ||||||
|  |         public void afterTextChanged(Editable editable) { | ||||||
|  |             final String text = editable.toString(); | ||||||
|  |             try { | ||||||
|  |                 final int code = Integer.parseInt(text); | ||||||
|  |                 region = PhoneNumberUtilWrapper.getInstance(EnterPhoneNumberActivity.this).getRegionCodeForCountryCode(code); | ||||||
|  |                 if ("ZZ".equals(region)) { | ||||||
|  |                     binding.country.setText(TextUtils.isEmpty(text) ? R.string.choose_a_country : R.string.invalid_country_code); | ||||||
|  |                 } else { | ||||||
|  |                     binding.number.requestFocus(); | ||||||
|  |                     binding.country.setText(PhoneNumberUtilWrapper.getCountryForCode(region)); | ||||||
|  |                 } | ||||||
|  |             } catch (NumberFormatException e) { | ||||||
|  |                 binding.country.setText(TextUtils.isEmpty(text) ? R.string.choose_a_country : R.string.invalid_country_code); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     }; | ||||||
|  | 
 | ||||||
|  |     @Override | ||||||
|  |     protected void onCreate(final Bundle savedInstanceState) { | ||||||
|  |         super.onCreate(savedInstanceState); | ||||||
|  |         this.binding = DataBindingUtil.setContentView(this, R.layout.activity_enter_number); | ||||||
|  |         this.binding.countryCode.setCompoundDrawables(new TextDrawable(this.binding.countryCode, "+"), null, null, null); | ||||||
|  |         this.binding.country.setOnClickListener(this::onSelectCountryClick); | ||||||
|  |         this.binding.next.setOnClickListener(this::onNextClick); | ||||||
|  |         setSupportActionBar((Toolbar) this.binding.toolbar); | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         this.binding.countryCode.addTextChangedListener(this.countryCodeTextWatcher); | ||||||
|  |         this.region = PhoneNumberUtilWrapper.getUserCountry(this); | ||||||
|  |         this.binding.countryCode.setText(String.valueOf(PhoneNumberUtilWrapper.getInstance(this).getCountryCodeForRegion(this.region))); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     private void onNextClick(View v) { | ||||||
|  |         final AlertDialog.Builder builder = new AlertDialog.Builder(this); | ||||||
|  |         try { | ||||||
|  |             final Editable number = this.binding.number.getText(); | ||||||
|  |             final String input = number.toString(); | ||||||
|  |             final Phonenumber.PhoneNumber phoneNumber = PhoneNumberUtilWrapper.getInstance(this).parse(input, region); | ||||||
|  |             this.binding.countryCode.setText(String.valueOf(phoneNumber.getCountryCode())); | ||||||
|  |             number.clear(); | ||||||
|  |             number.append(String.valueOf(phoneNumber.getNationalNumber())); | ||||||
|  |             final String formattedPhoneNumber = PhoneNumberUtilWrapper.getInstance(this).format(phoneNumber, PhoneNumberUtil.PhoneNumberFormat.INTERNATIONAL); | ||||||
|  | 
 | ||||||
|  |             if (PhoneNumberUtilWrapper.getInstance(this).isValidNumber(phoneNumber)) { | ||||||
|  |                 builder.setMessage(Html.fromHtml(getString(R.string.we_will_be_verifying, formattedPhoneNumber))); | ||||||
|  |                 builder.setNegativeButton(R.string.edit, null); | ||||||
|  |                 builder.setPositiveButton(R.string.ok, (dialog, which) -> onPhoneNumberEntered(phoneNumber)); | ||||||
|  |             } else { | ||||||
|  |                 builder.setMessage(getString(R.string.not_a_valid_phone_number, formattedPhoneNumber)); | ||||||
|  |                 builder.setPositiveButton(R.string.ok, null); | ||||||
|  |             } | ||||||
|  |             Log.d(Config.LOGTAG, phoneNumber.toString()); | ||||||
|  |         } catch (NumberParseException e) { | ||||||
|  |             builder.setMessage(R.string.please_enter_your_phone_number); | ||||||
|  |             builder.setPositiveButton(R.string.ok, null); | ||||||
|  |         } | ||||||
|  |         builder.create().show(); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     private void onSelectCountryClick(View view) { | ||||||
|  | 
 | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     private void onPhoneNumberEntered(Phonenumber.PhoneNumber phoneNumber) { | ||||||
|  | 
 | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  | } | ||||||
| @ -0,0 +1,240 @@ | |||||||
|  | package eu.siacs.conversations.ui.drawable; /** | ||||||
|  |  * Copyright 2016 Ali Muzaffar | ||||||
|  |  * <p/> | ||||||
|  |  * Licensed under the Apache License, Version 2.0 (the "License"); | ||||||
|  |  * you may not use this file except in compliance with the License. | ||||||
|  |  * You may obtain a copy of the License at | ||||||
|  |  * <p/> | ||||||
|  |  * http://www.apache.org/licenses/LICENSE-2.0 | ||||||
|  |  * <p/> | ||||||
|  |  * Unless required by applicable law or agreed to in writing, software | ||||||
|  |  * distributed under the License is distributed on an "AS IS" BASIS, | ||||||
|  |  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||||
|  |  * See the License for the specific language governing permissions and | ||||||
|  |  * limitations under the License. | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | import android.graphics.Canvas; | ||||||
|  | import android.graphics.ColorFilter; | ||||||
|  | import android.graphics.Paint; | ||||||
|  | import android.graphics.PixelFormat; | ||||||
|  | import android.graphics.Rect; | ||||||
|  | import android.graphics.drawable.Drawable; | ||||||
|  | import android.text.Editable; | ||||||
|  | import android.text.TextWatcher; | ||||||
|  | import android.widget.TextView; | ||||||
|  | 
 | ||||||
|  | import java.lang.ref.WeakReference; | ||||||
|  | 
 | ||||||
|  | public class TextDrawable extends Drawable implements TextWatcher { | ||||||
|  |     private WeakReference<TextView> ref; | ||||||
|  |     private String mText; | ||||||
|  |     private Paint mPaint; | ||||||
|  |     private Rect mHeightBounds; | ||||||
|  |     private boolean mBindToViewPaint = false; | ||||||
|  |     private float mPrevTextSize = 0; | ||||||
|  |     private boolean mInitFitText = false; | ||||||
|  |     private boolean mFitTextEnabled = false; | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * Create a TextDrawable using the given paint object and string | ||||||
|  |      * | ||||||
|  |      * @param paint | ||||||
|  |      * @param s | ||||||
|  |      */ | ||||||
|  |     public TextDrawable(Paint paint, String s) { | ||||||
|  |         mText = s; | ||||||
|  |         mPaint = new Paint(paint); | ||||||
|  |         mHeightBounds = new Rect(); | ||||||
|  |         init(); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * Create a TextDrawable. This uses the given TextView to initialize paint and has initial text | ||||||
|  |      * that will be drawn. Initial text can also be useful for reserving space that may otherwise | ||||||
|  |      * not be available when setting compound drawables. | ||||||
|  |      * | ||||||
|  |      * @param tv               The TextView / EditText using to initialize this drawable | ||||||
|  |      * @param initialText      Optional initial text to display | ||||||
|  |      * @param bindToViewsText  Should this drawable mirror the text in the TextView | ||||||
|  |      * @param bindToViewsPaint Should this drawable mirror changes to Paint in the TextView, like textColor, typeface, alpha etc. | ||||||
|  |      *                         Note, this will override any changes made using setColorFilter or setAlpha. | ||||||
|  |      */ | ||||||
|  |     public TextDrawable(TextView tv, String initialText, boolean bindToViewsText, boolean bindToViewsPaint) { | ||||||
|  |         this(tv.getPaint(), initialText); | ||||||
|  |         ref = new WeakReference<>(tv); | ||||||
|  |         if (bindToViewsText || bindToViewsPaint) { | ||||||
|  |             if (bindToViewsText) { | ||||||
|  |                 tv.addTextChangedListener(this); | ||||||
|  |             } | ||||||
|  |             mBindToViewPaint = bindToViewsPaint; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * Create a TextDrawable. This uses the given TextView to initialize paint and the text that | ||||||
|  |      * will be drawn. | ||||||
|  |      * | ||||||
|  |      * @param tv               The TextView / EditText using to initialize this drawable | ||||||
|  |      * @param bindToViewsText  Should this drawable mirror the text in the TextView | ||||||
|  |      * @param bindToViewsPaint Should this drawable mirror changes to Paint in the TextView, like textColor, typeface, alpha etc. | ||||||
|  |      *                         Note, this will override any changes made using setColorFilter or setAlpha. | ||||||
|  |      */ | ||||||
|  |     public TextDrawable(TextView tv, boolean bindToViewsText, boolean bindToViewsPaint) { | ||||||
|  |         this(tv, tv.getText().toString(), false, false); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * Use the provided TextView/EditText to initialize the drawable. | ||||||
|  |      * The Drawable will copy the Text and the Paint properties, however it will from that | ||||||
|  |      * point on be independant of the TextView. | ||||||
|  |      * | ||||||
|  |      * @param tv a TextView or EditText or any of their children. | ||||||
|  |      */ | ||||||
|  |     public TextDrawable(TextView tv) { | ||||||
|  |         this(tv, false, false); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * Use the provided TextView/EditText to initialize the drawable. | ||||||
|  |      * The Drawable will copy the Paint properties, and use the provided text to initialise itself. | ||||||
|  |      * | ||||||
|  |      * @param tv a TextView or EditText or any of their children. | ||||||
|  |      * @param s  The String to draw | ||||||
|  |      */ | ||||||
|  |     public TextDrawable(TextView tv, String s) { | ||||||
|  |         this(tv, s, false, false); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @Override | ||||||
|  |     public void draw(Canvas canvas) { | ||||||
|  |         if (mBindToViewPaint && ref.get() != null) { | ||||||
|  |             Paint p = ref.get().getPaint(); | ||||||
|  |             canvas.drawText(mText, 0, getBounds().height(), p); | ||||||
|  |         } else { | ||||||
|  |             if (mInitFitText) { | ||||||
|  |                 fitTextAndInit(); | ||||||
|  |             } | ||||||
|  |             canvas.drawText(mText, 0, getBounds().height(), mPaint); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @Override | ||||||
|  |     public void setAlpha(int alpha) { | ||||||
|  |         mPaint.setAlpha(alpha); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @Override | ||||||
|  |     public void setColorFilter(ColorFilter colorFilter) { | ||||||
|  |         mPaint.setColorFilter(colorFilter); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @Override | ||||||
|  |     public int getOpacity() { | ||||||
|  |         int alpha = mPaint.getAlpha(); | ||||||
|  |         if (alpha == 0) { | ||||||
|  |             return PixelFormat.TRANSPARENT; | ||||||
|  |         } else if (alpha == 255) { | ||||||
|  |             return PixelFormat.OPAQUE; | ||||||
|  |         } else { | ||||||
|  |             return PixelFormat.TRANSLUCENT; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     private void init() { | ||||||
|  |         Rect bounds = getBounds(); | ||||||
|  |         //We want to use some character to determine the max height of the text. | ||||||
|  |         //Otherwise if we draw something like "..." they will appear centered | ||||||
|  |         //Here I'm just going to use the entire alphabet to determine max height. | ||||||
|  |         mPaint.getTextBounds("1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz+", 0, 1, mHeightBounds); | ||||||
|  |         //This doesn't account for leading or training white spaces. | ||||||
|  |         //mPaint.getTextBounds(mText, 0, mText.length(), bounds); | ||||||
|  |         float width = mPaint.measureText(mText); | ||||||
|  |         bounds.top = mHeightBounds.top; | ||||||
|  |         bounds.bottom = mHeightBounds.bottom; | ||||||
|  |         bounds.right = (int) width; | ||||||
|  |         bounds.left = 0; | ||||||
|  |         setBounds(bounds); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setPaint(Paint paint) { | ||||||
|  |         mPaint = new Paint(paint); | ||||||
|  |         //Since this can change the font used, we need to recalculate bounds. | ||||||
|  |         if (mFitTextEnabled && !mInitFitText) { | ||||||
|  |             fitTextAndInit(); | ||||||
|  |         } else { | ||||||
|  |             init(); | ||||||
|  |         } | ||||||
|  |         invalidateSelf(); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public Paint getPaint() { | ||||||
|  |         return mPaint; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setText(String text) { | ||||||
|  |         mText = text; | ||||||
|  |         //Since this can change the bounds of the text, we need to recalculate. | ||||||
|  |         if (mFitTextEnabled && !mInitFitText) { | ||||||
|  |             fitTextAndInit(); | ||||||
|  |         } else { | ||||||
|  |             init(); | ||||||
|  |         } | ||||||
|  |         invalidateSelf(); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public String getText() { | ||||||
|  |         return mText; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @Override | ||||||
|  |     public void beforeTextChanged(CharSequence s, int start, int count, int after) { | ||||||
|  | 
 | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @Override | ||||||
|  |     public void onTextChanged(CharSequence s, int start, int before, int count) { | ||||||
|  | 
 | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @Override | ||||||
|  |     public void afterTextChanged(Editable s) { | ||||||
|  |         setText(s.toString()); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * Make the TextDrawable match the width of the View it's associated with. | ||||||
|  |      * <p/> | ||||||
|  |      * Note: While this option will not work if bindToViewPaint is true. | ||||||
|  |      * | ||||||
|  |      * @param fitText | ||||||
|  |      */ | ||||||
|  |     public void setFillText(boolean fitText) { | ||||||
|  |         mFitTextEnabled = fitText; | ||||||
|  |         if (fitText) { | ||||||
|  |             mPrevTextSize = mPaint.getTextSize(); | ||||||
|  |             if (ref.get() != null) { | ||||||
|  |                 if (ref.get().getWidth() > 0) { | ||||||
|  |                     fitTextAndInit(); | ||||||
|  |                 } else { | ||||||
|  |                     mInitFitText = true; | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         } else { | ||||||
|  |             if (mPrevTextSize > 0) { | ||||||
|  |                 mPaint.setTextSize(mPrevTextSize); | ||||||
|  |             } | ||||||
|  |             init(); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     private void fitTextAndInit() { | ||||||
|  |         float fitWidth = ref.get().getWidth(); | ||||||
|  |         float textWidth = mPaint.measureText(mText); | ||||||
|  |         float multi = fitWidth / textWidth; | ||||||
|  |         mPaint.setTextSize(mPaint.getTextSize() * multi); | ||||||
|  |         mInitFitText = false; | ||||||
|  |         init(); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  | } | ||||||
| @ -0,0 +1,53 @@ | |||||||
|  | package eu.siacs.conversations.utils; | ||||||
|  | 
 | ||||||
|  | import android.content.Context; | ||||||
|  | import android.telephony.TelephonyManager; | ||||||
|  | 
 | ||||||
|  | import java.util.Locale; | ||||||
|  | 
 | ||||||
|  | import io.michaelrocks.libphonenumber.android.PhoneNumberUtil; | ||||||
|  | 
 | ||||||
|  | public class PhoneNumberUtilWrapper { | ||||||
|  | 
 | ||||||
|  |     private static volatile PhoneNumberUtil instance; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |     public static String getCountryForCode(String code) { | ||||||
|  |         Locale locale = new Locale("", code); | ||||||
|  |         return locale.getDisplayCountry(); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public static String getUserCountry(Context context) { | ||||||
|  |         try { | ||||||
|  |             final TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); | ||||||
|  |             final String simCountry = tm.getSimCountryIso(); | ||||||
|  |             if (simCountry != null && simCountry.length() == 2) { // SIM country code is available | ||||||
|  |                 return simCountry.toUpperCase(Locale.US); | ||||||
|  |             } else if (tm.getPhoneType() != TelephonyManager.PHONE_TYPE_CDMA) { // device is not 3G (would be unreliable) | ||||||
|  |                 String networkCountry = tm.getNetworkCountryIso(); | ||||||
|  |                 if (networkCountry != null && networkCountry.length() == 2) { // network country code is available | ||||||
|  |                     return networkCountry.toUpperCase(Locale.US); | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         } catch (Exception e) { | ||||||
|  |             // fallthrough | ||||||
|  |         } | ||||||
|  |         Locale locale = Locale.getDefault(); | ||||||
|  |         return locale.getCountry(); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public static PhoneNumberUtil getInstance(final Context context) { | ||||||
|  |         PhoneNumberUtil localInstance = instance; | ||||||
|  |         if (localInstance == null) { | ||||||
|  |             synchronized (PhoneNumberUtilWrapper.class){ | ||||||
|  |                 localInstance = instance; | ||||||
|  |                 if (localInstance == null) { | ||||||
|  |                     instance = localInstance = PhoneNumberUtil.createInstance(context); | ||||||
|  |                 } | ||||||
|  | 
 | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |         return localInstance; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  | } | ||||||
| @ -2,16 +2,22 @@ package eu.siacs.conversations.utils; | |||||||
| 
 | 
 | ||||||
| import android.app.Activity; | import android.app.Activity; | ||||||
| import android.content.Intent; | import android.content.Intent; | ||||||
|  | import android.util.Log; | ||||||
| 
 | 
 | ||||||
|  | import eu.siacs.conversations.Config; | ||||||
| import eu.siacs.conversations.ui.ConversationsActivity; | import eu.siacs.conversations.ui.ConversationsActivity; | ||||||
|  | import eu.siacs.conversations.ui.EnterPhoneNumberActivity; | ||||||
| 
 | 
 | ||||||
| public class SignupUtils { | public class SignupUtils { | ||||||
| 
 | 
 | ||||||
|     public static Intent getSignUpIntent(Activity activity) { |     public static Intent getSignUpIntent(Activity activity) { | ||||||
|         return null; |         final Intent intent = new Intent(activity, EnterPhoneNumberActivity.class); | ||||||
|  |         return intent; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     public static Intent getRedirectionIntent(ConversationsActivity activity) { |     public static Intent getRedirectionIntent(ConversationsActivity activity) { | ||||||
|         return null; |         final Intent intent = getSignUpIntent(activity); | ||||||
|  |         intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); | ||||||
|  |         return intent; | ||||||
|     } |     } | ||||||
| } | } | ||||||
							
								
								
									
										
											BIN
										
									
								
								src/quick/res/drawable-hdpi/ic_arrow_drop_down_black_18dp.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								src/quick/res/drawable-hdpi/ic_arrow_drop_down_black_18dp.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 117 B | 
							
								
								
									
										
											BIN
										
									
								
								src/quick/res/drawable-mdpi/ic_arrow_drop_down_black_18dp.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								src/quick/res/drawable-mdpi/ic_arrow_drop_down_black_18dp.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 88 B | 
							
								
								
									
										
											BIN
										
									
								
								src/quick/res/drawable-xhdpi/ic_arrow_drop_down_black_18dp.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								src/quick/res/drawable-xhdpi/ic_arrow_drop_down_black_18dp.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 117 B | 
							
								
								
									
										
											BIN
										
									
								
								src/quick/res/drawable-xxhdpi/ic_arrow_drop_down_black_18dp.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								src/quick/res/drawable-xxhdpi/ic_arrow_drop_down_black_18dp.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 126 B | 
							
								
								
									
										
											BIN
										
									
								
								src/quick/res/drawable-xxxhdpi/ic_arrow_drop_down_black_18dp.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								src/quick/res/drawable-xxxhdpi/ic_arrow_drop_down_black_18dp.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 141 B | 
							
								
								
									
										91
									
								
								src/quick/res/layout/activity_enter_number.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										91
									
								
								src/quick/res/layout/activity_enter_number.xml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,91 @@ | |||||||
|  | <?xml version="1.0" encoding="utf-8"?> | ||||||
|  | <layout xmlns:android="http://schemas.android.com/apk/res/android"> | ||||||
|  | 
 | ||||||
|  |     <LinearLayout | ||||||
|  |         android:layout_width="match_parent" | ||||||
|  |         android:layout_height="match_parent" | ||||||
|  |         android:orientation="vertical"> | ||||||
|  | 
 | ||||||
|  |         <include android:id="@+id/toolbar" layout="@layout/toolbar" /> | ||||||
|  | 
 | ||||||
|  |         <ScrollView | ||||||
|  |             android:layout_width="match_parent" | ||||||
|  |             android:layout_height="match_parent" | ||||||
|  |             android:fillViewport="true"> | ||||||
|  | 
 | ||||||
|  |             <RelativeLayout | ||||||
|  |                 android:layout_width="match_parent" | ||||||
|  |                 android:layout_height="wrap_content"> | ||||||
|  | 
 | ||||||
|  |                 <TextView | ||||||
|  |                     android:id="@+id/instructions" | ||||||
|  |                     android:layout_width="wrap_content" | ||||||
|  |                     android:layout_height="wrap_content" | ||||||
|  |                     android:padding="16dp" | ||||||
|  |                     android:gravity="center_horizontal" | ||||||
|  |                     android:textAppearance="@style/TextAppearance.Conversations.Body1" | ||||||
|  |                     android:text="@string/enter_country_code_and_phone_number"/> | ||||||
|  | 
 | ||||||
|  |                 <LinearLayout | ||||||
|  |                     android:id="@+id/phone_number_box" | ||||||
|  |                     android:layout_width="256dp" | ||||||
|  |                     android:layout_height="match_parent" | ||||||
|  |                     android:layout_above="@+id/next" | ||||||
|  |                     android:layout_below="@+id/instructions" | ||||||
|  |                     android:layout_centerHorizontal="true" | ||||||
|  |                     android:orientation="vertical"> | ||||||
|  | 
 | ||||||
|  |                     <EditText | ||||||
|  |                         android:id="@+id/country" | ||||||
|  |                         style="@style/Widget.Conversations.EditText" | ||||||
|  |                         android:layout_width="match_parent" | ||||||
|  |                         android:layout_height="wrap_content" | ||||||
|  |                         android:cursorVisible="false" | ||||||
|  |                         android:drawableRight="@drawable/ic_arrow_drop_down_black_18dp" | ||||||
|  |                         android:focusable="false" | ||||||
|  |                         android:gravity="bottom|center_horizontal" | ||||||
|  |                         android:longClickable="false" /> | ||||||
|  | 
 | ||||||
|  |                     <LinearLayout | ||||||
|  |                         android:layout_width="match_parent" | ||||||
|  |                         android:layout_height="wrap_content" | ||||||
|  |                         android:orientation="horizontal"> | ||||||
|  | 
 | ||||||
|  |                         <EditText | ||||||
|  |                             android:id="@+id/country_code" | ||||||
|  |                             style="@style/Widget.Conversations.EditText" | ||||||
|  |                             android:layout_width="0dp" | ||||||
|  |                             android:layout_height="wrap_content" | ||||||
|  |                             android:layout_weight="1" | ||||||
|  |                             android:gravity="bottom|center_horizontal" | ||||||
|  |                             android:inputType="number" | ||||||
|  |                             android:longClickable="false" | ||||||
|  |                             android:maxLength="3" | ||||||
|  |                             android:maxLines="1" /> | ||||||
|  | 
 | ||||||
|  |                         <EditText | ||||||
|  |                             android:id="@+id/number" | ||||||
|  |                             style="@style/Widget.Conversations.EditText" | ||||||
|  |                             android:layout_width="0dp" | ||||||
|  |                             android:layout_height="wrap_content" | ||||||
|  |                             android:layout_weight="3" | ||||||
|  |                             android:hint="@string/phone_number" | ||||||
|  |                             android:inputType="number" | ||||||
|  |                             android:gravity="bottom|start" | ||||||
|  |                             android:longClickable="false" | ||||||
|  |                             android:maxLines="1" /> | ||||||
|  |                     </LinearLayout> | ||||||
|  |                 </LinearLayout> | ||||||
|  |                 <Button | ||||||
|  |                     android:id="@+id/next" | ||||||
|  |                     android:layout_alignParentBottom="true" | ||||||
|  |                     android:layout_alignParentEnd="true" | ||||||
|  |                     style="@style/Widget.Conversations.Button.Borderless" | ||||||
|  |                     android:layout_width="wrap_content" | ||||||
|  |                     android:layout_height="wrap_content" | ||||||
|  |                     android:text="@string/next" | ||||||
|  |                     android:textColor="?colorAccent"/> | ||||||
|  |             </RelativeLayout> | ||||||
|  |         </ScrollView> | ||||||
|  |     </LinearLayout> | ||||||
|  | </layout> | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Daniel Gultsch
						Daniel Gultsch