add get telegram dialog and improve ui

This commit is contained in:
Chumva 2018-07-05 19:09:01 +03:00
parent 5089aea3f4
commit 981143cacd
10 changed files with 382 additions and 158 deletions

View file

@ -3,20 +3,20 @@
<item android:state_pressed="true"> <item android:state_pressed="true">
<shape android:shape="rectangle"> <shape android:shape="rectangle">
<solid android:color="@color/ctrl_active_light" /> <solid android:color="@color/dialog_continue_btn_active_bg" />
<corners android:radius="@dimen/dialog_button_radius" /> <corners android:radius="@dimen/dialog_continue_button_radius" />
</shape> </shape>
</item> </item>
<item android:state_enabled="false"> <item android:state_enabled="false">
<shape android:shape="rectangle"> <shape android:shape="rectangle">
<solid android:color="@color/ctrl_light" /> <solid android:color="@color/ctrl_light" />
<corners android:radius="@dimen/dialog_button_radius" /> <corners android:radius="@dimen/dialog_continue_button_radius" />
</shape> </shape>
</item> </item>
<item> <item>
<shape android:shape="rectangle"> <shape android:shape="rectangle">
<solid android:color="@color/ctrl_active_light" /> <solid android:color="@color/dialog_continue_btn_non_active_bg" />
<corners android:radius="@dimen/dialog_button_radius" /> <corners android:radius="@dimen/dialog_continue_button_radius" />
</shape> </shape>
</item> </item>

View file

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<shape android:shape="rectangle">
<solid android:color="@color/dialog_continue_btn_active_bg" />
<corners android:radius="@dimen/dialog_continue_button_radius" />
</shape>
</item>
<item android:state_enabled="false">
<shape android:shape="rectangle">
<solid android:color="@color/ctrl_light" />
<corners android:radius="@dimen/dialog_continue_button_radius" />
</shape>
</item>
<item>
<shape android:shape="rectangle">
<solid android:color="@color/dialog_continue_btn_active_bg" />
<corners android:radius="@dimen/dialog_continue_button_radius" />
</shape>
</item>
</selector>

View file

@ -1,10 +1,24 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<shape android:shape="rectangle">
<solid android:color="#f0f0f0" />
<corners android:radius="@dimen/dialog_button_radius" />
</shape>
</item>
<item android:state_enabled="false">
<shape android:shape="rectangle">
<solid android:color="@color/ctrl_light" />
<corners android:radius="@dimen/dialog_button_radius" />
</shape>
</item>
<item> <item>
<shape android:shape="rectangle"> <shape android:shape="rectangle">
<corners android:radius="2dp" />
<solid android:color="@null" /> <solid android:color="@null" />
<corners android:radius="@dimen/dialog_button_radius" />
<stroke android:width="1dp" android:color="#f0f0f0" /> <stroke android:width="1dp" android:color="#f0f0f0" />
</shape> </shape>
</item> </item>
</selector> </selector>

View file

@ -11,7 +11,8 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:fillViewport="true" android:fillViewport="true"
android:visibility="visible"> android:visibility="visible"
tools:visibility="gone">
<FrameLayout <FrameLayout
android:layout_width="match_parent" android:layout_width="match_parent"
@ -56,7 +57,7 @@
<Button <Button
android:id="@+id/welcome_continue_button" android:id="@+id/welcome_continue_button"
style="@style/DialogActionButtonActive" style="@style/DialogActionButtonActive.Welcome"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center" android:layout_gravity="center"
@ -115,19 +116,6 @@
</LinearLayout> </LinearLayout>
<TextView
android:id="@+id/login_description"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/content_padding_standard"
android:layout_marginEnd="@dimen/dialog_welcome_padding_horizontal"
android:layout_marginLeft="@dimen/dialog_padding_horizontal"
android:layout_marginRight="@dimen/dialog_welcome_padding_horizontal"
android:layout_marginStart="@dimen/dialog_padding_horizontal"
android:layout_marginTop="@dimen/content_padding_standard"
android:textColor="@color/app_bar_title_light"
android:textSize="@dimen/descr_text_size"
tools:text="@string/authorization_already_registered_in_telegram" />
<ScrollView <ScrollView
android:layout_width="match_parent" android:layout_width="match_parent"
@ -138,164 +126,234 @@
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/dialog_welcome_padding_horizontal"
android:layout_marginLeft="@dimen/dialog_welcome_padding_horizontal"
android:layout_marginRight="@dimen/dialog_welcome_padding_horizontal"
android:layout_marginStart="@dimen/dialog_welcome_padding_horizontal"
android:layout_marginTop="@dimen/content_padding_standard"
android:orientation="vertical"> android:orientation="vertical">
<LinearLayout <TextView
android:id="@+id/no_telegram" android:id="@+id/login_description"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/dialog_padding_vertical"
android:background="@drawable/no_telegram_btn_bg"
android:gravity="center_vertical"
android:visibility="gone"
tools:visibility="visible">
<TextView
android:id="@+id/no_telegram_title"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/content_padding_standard"
android:layout_marginLeft="@dimen/content_padding_standard"
android:layout_marginRight="@dimen/content_padding_standard"
android:layout_marginTop="@dimen/content_padding_standard"
android:layout_weight="1"
android:ellipsize="end"
android:gravity="center_vertical"
android:maxLines="2"
android:text="@string/do_not_have_telegram"
android:textColor="?attr/ctrl_active_color"
android:textSize="@dimen/descr_text_size"
android:textStyle="bold" />
<ImageView
android:id="@+id/no_telegram_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/content_padding_standard"
android:layout_marginRight="@dimen/content_padding_standard"
android:background="?attr/selectableItemBackgroundBorderless"
android:contentDescription="@string/do_not_have_telegram"
android:scaleType="centerInside"
android:src="@drawable/ic_arrow_forward"
android:tint="?attr/icon_color"
tools:tint="@color/icon_light" />
</LinearLayout>
<net.osmand.telegram.ui.views.TextViewEx
android:id="@+id/login_input_type_descr"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/content_padding_standard" android:layout_marginBottom="@dimen/content_padding_standard"
android:layout_marginEnd="@dimen/content_padding_standard" android:layout_marginEnd="@dimen/dialog_welcome_padding_horizontal"
android:layout_marginLeft="@dimen/content_padding_standard" android:layout_marginLeft="@dimen/dialog_padding_horizontal"
android:layout_marginRight="@dimen/content_padding_standard" android:layout_marginRight="@dimen/dialog_welcome_padding_horizontal"
android:layout_marginStart="@dimen/content_padding_standard" android:layout_marginStart="@dimen/dialog_padding_horizontal"
android:text="@string/enter_phone_number" android:layout_marginTop="@dimen/content_padding_standard"
android:textColor="@color/app_bar_title_light" android:textColor="@color/app_bar_title_light"
android:textSize="@dimen/title_text_size" android:textSize="@dimen/descr_text_size"
android:textStyle="bold" /> tools:text="@string/authorization_already_registered_in_telegram" />
<LinearLayout <LinearLayout
android:id="@+id/enter_phone_number_layout"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="vertical" android:layout_marginEnd="@dimen/dialog_welcome_padding_horizontal"
android:visibility="visible"> android:layout_marginLeft="@dimen/dialog_welcome_padding_horizontal"
android:layout_marginRight="@dimen/dialog_welcome_padding_horizontal"
android:layout_marginStart="@dimen/dialog_welcome_padding_horizontal"
android:layout_marginTop="@dimen/content_padding_standard"
android:orientation="vertical">
<studio.carbonylgroup.textfieldboxes.TextFieldBoxes <LinearLayout
android:id="@+id/no_telegram"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
app:hasClearButton="true"> android:layout_marginBottom="@dimen/dialog_padding_vertical"
android:background="@drawable/no_telegram_btn_bg"
android:gravity="center_vertical"
android:visibility="gone"
tools:visibility="gone">
<studio.carbonylgroup.textfieldboxes.ExtendedEditText <TextView
android:id="@+id/phone_number_edit_text" android:id="@+id/no_telegram_title"
android:layout_width="match_parent" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:hint="@string/phone_number_title" android:layout_marginBottom="@dimen/content_padding_standard"
android:inputType="phone" /> android:layout_marginLeft="@dimen/content_padding_standard"
android:layout_marginRight="@dimen/content_padding_standard"
android:layout_marginTop="@dimen/content_padding_standard"
android:layout_weight="1"
android:ellipsize="end"
android:gravity="center_vertical"
android:maxLines="2"
android:text="@string/do_not_have_telegram"
android:textColor="?attr/ctrl_active_color"
android:textSize="@dimen/descr_text_size"
android:textStyle="bold" />
</studio.carbonylgroup.textfieldboxes.TextFieldBoxes> <ImageView
android:id="@+id/no_telegram_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/content_padding_standard"
android:layout_marginRight="@dimen/content_padding_standard"
android:contentDescription="@string/do_not_have_telegram"
android:scaleType="centerInside"
android:src="@drawable/ic_arrow_forward"
android:tint="?attr/icon_color"
tools:tint="@color/icon_light" />
<TextView </LinearLayout>
android:id="@+id/phone_number_format"
<net.osmand.telegram.ui.views.TextViewEx
android:id="@+id/login_input_type_descr"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/content_padding_standard" android:layout_marginBottom="@dimen/content_padding_standard"
android:layout_marginEnd="@dimen/content_padding_standard"
android:layout_marginLeft="@dimen/content_padding_standard" android:layout_marginLeft="@dimen/content_padding_standard"
android:layout_marginRight="@dimen/content_padding_standard" android:layout_marginRight="@dimen/content_padding_standard"
android:layout_marginTop="@dimen/content_padding_standard" android:layout_marginStart="@dimen/content_padding_standard"
android:text="@string/phone_number_descr" android:text="@string/enter_phone_number"
android:textSize="@dimen/descr_text_size" /> android:textColor="@color/app_bar_title_light"
android:textSize="@dimen/title_text_size"
android:textStyle="bold"
tools:visibility="visible" />
</LinearLayout> <LinearLayout
android:id="@+id/enter_phone_number_layout"
<LinearLayout
android:id="@+id/enter_code_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingBottom="@dimen/content_padding_standard"
android:visibility="gone">
<studio.carbonylgroup.textfieldboxes.TextFieldBoxes
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
app:hasClearButton="true" android:orientation="vertical"
app:labelText="@string/authentication_code"> android:visibility="visible"
tools:visibility="visible">
<studio.carbonylgroup.textfieldboxes.ExtendedEditText <studio.carbonylgroup.textfieldboxes.TextFieldBoxes
android:id="@+id/code_edit_text"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:inputType="number" app:hasClearButton="true">
tools:text="123456" />
</studio.carbonylgroup.textfieldboxes.TextFieldBoxes> <studio.carbonylgroup.textfieldboxes.ExtendedEditText
android:id="@+id/phone_number_edit_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/phone_number_title"
android:inputType="phone" />
</LinearLayout> </studio.carbonylgroup.textfieldboxes.TextFieldBoxes>
<LinearLayout <TextView
android:id="@+id/enter_password_layout" android:id="@+id/phone_number_format"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="vertical" android:layout_marginBottom="@dimen/content_padding_standard"
android:paddingBottom="@dimen/content_padding_standard" android:layout_marginLeft="@dimen/content_padding_standard"
android:visibility="gone"> android:layout_marginRight="@dimen/content_padding_standard"
android:layout_marginTop="@dimen/content_padding_standard"
android:text="@string/phone_number_descr"
android:textSize="@dimen/descr_text_size" />
<studio.carbonylgroup.textfieldboxes.TextFieldBoxes </LinearLayout>
<LinearLayout
android:id="@+id/enter_code_layout"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
app:hasClearButton="true" android:orientation="vertical"
app:labelText="@string/shared_string_password"> android:paddingBottom="@dimen/content_padding_standard"
android:visibility="gone">
<studio.carbonylgroup.textfieldboxes.ExtendedEditText <studio.carbonylgroup.textfieldboxes.TextFieldBoxes
android:id="@+id/password_edit_text"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:inputType="textPassword" app:hasClearButton="true"
tools:text="12345678" /> app:labelText="@string/authentication_code">
</studio.carbonylgroup.textfieldboxes.TextFieldBoxes> <studio.carbonylgroup.textfieldboxes.ExtendedEditText
android:id="@+id/code_edit_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="number"
tools:text="123456" />
</LinearLayout> </studio.carbonylgroup.textfieldboxes.TextFieldBoxes>
<LinearLayout </LinearLayout>
android:id="@+id/progress_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical"
android:visibility="gone">
<ProgressBar <LinearLayout
android:layout_width="@dimen/progress_bar_size_small" android:id="@+id/enter_password_layout"
android:layout_height="@dimen/progress_bar_size_small" /> android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingBottom="@dimen/content_padding_standard"
android:visibility="gone">
<studio.carbonylgroup.textfieldboxes.TextFieldBoxes
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:hasClearButton="true"
app:labelText="@string/shared_string_password">
<studio.carbonylgroup.textfieldboxes.ExtendedEditText
android:id="@+id/password_edit_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textPassword"
tools:text="12345678" />
</studio.carbonylgroup.textfieldboxes.TextFieldBoxes>
</LinearLayout>
<LinearLayout
android:id="@+id/get_telegram_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingBottom="@dimen/content_padding_standard"
android:visibility="gone"
tools:visibility="gone">
<TextView
android:id="@+id/get_telegram_description_first"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/content_padding_standard"
android:layout_marginEnd="@dimen/content_padding_standard"
android:layout_marginLeft="@dimen/content_padding_standard"
android:layout_marginRight="@dimen/content_padding_standard"
android:layout_marginStart="@dimen/content_padding_standard"
android:textColor="@color/app_bar_title_light"
android:textSize="@dimen/descr_text_size"
tools:text="@string/get_telegram_description_second" />
<ImageView
android:id="@+id/google_play_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/content_padding_standard"
android:layout_marginEnd="@dimen/content_padding_standard"
android:layout_marginLeft="@dimen/content_padding_standard"
android:layout_marginRight="@dimen/content_padding_standard"
android:layout_marginStart="@dimen/content_padding_standard"
android:src="@drawable/google_play_badge" />
<TextView
android:id="@+id/get_telegram_description_second"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/content_padding_standard"
android:layout_marginEnd="@dimen/content_padding_standard"
android:layout_marginLeft="@dimen/content_padding_standard"
android:layout_marginRight="@dimen/content_padding_standard"
android:layout_marginStart="@dimen/content_padding_standard"
android:textColor="@color/app_bar_title_light"
android:textSize="@dimen/descr_text_size"
tools:text="@string/get_telegram_description_third" />
</LinearLayout>
<LinearLayout
android:id="@+id/progress_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical"
android:visibility="gone">
<ProgressBar
android:layout_width="@dimen/progress_bar_size_small"
android:layout_height="@dimen/progress_bar_size_small" />
</LinearLayout>
</LinearLayout> </LinearLayout>

View file

@ -36,4 +36,7 @@
<color name="app_bar_title_light">#333333</color> <color name="app_bar_title_light">#333333</color>
<color name="dialog_continue_btn_active_bg">#5959ff</color>
<color name="dialog_continue_btn_non_active_bg">#f0f0f0</color>
</resources> </resources>

View file

@ -18,6 +18,7 @@
<dimen name="dialog_button_height">36dp</dimen> <dimen name="dialog_button_height">36dp</dimen>
<dimen name="dialog_button_radius">2dp</dimen> <dimen name="dialog_button_radius">2dp</dimen>
<dimen name="dialog_continue_button_radius">4dp</dimen>
<dimen name="dialog_button_bottom_padding">40dp</dimen> <dimen name="dialog_button_bottom_padding">40dp</dimen>
<dimen name="dialog_welcome_title_bottom_padding">96dp</dimen> <dimen name="dialog_welcome_title_bottom_padding">96dp</dimen>
<dimen name="dialog_welcome_title_top_padding">120dp</dimen> <dimen name="dialog_welcome_title_top_padding">120dp</dimen>
@ -55,6 +56,7 @@
<dimen name="title_login_text_size">20sp</dimen> <dimen name="title_login_text_size">20sp</dimen>
<dimen name="title_welcome_text_size">32sp</dimen> <dimen name="title_welcome_text_size">32sp</dimen>
<dimen name="descr_text_size">16sp</dimen> <dimen name="descr_text_size">16sp</dimen>
<dimen name="continue_btn_text_size">14sp</dimen>
<dimen name="list_item_title_text_size">16sp</dimen> <dimen name="list_item_title_text_size">16sp</dimen>
<dimen name="list_item_description_text_size">12sp</dimen> <dimen name="list_item_description_text_size">12sp</dimen>

View file

@ -1,4 +1,8 @@
<resources> <resources>
<string name="get_telegram_title">Registration in Telegram</string>
<string name="get_telegram_description_first">You need an account in Telegram to use the capabilities of OsmAnd Location Sharing.</string>
<string name="get_telegram_description_second">If you want to continue, please install the Telegram from Google Play and register your account.</string>
<string name="get_telegram_description_third">After creating an account, you can use this application.</string>
<string name="shared_string_all">All</string> <string name="shared_string_all">All</string>
<string name="shared_string_off">Off</string> <string name="shared_string_off">Off</string>
<string name="authorization_already_registered_in_telegram">You need an already registered account and phone number in Telegram</string> <string name="authorization_already_registered_in_telegram">You need an already registered account and phone number in Telegram</string>

View file

@ -32,6 +32,9 @@
<style name="AppTheme.NoActionbar"> <style name="AppTheme.NoActionbar">
<item name="windowActionBar">false</item> <item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item> <item name="windowNoTitle">true</item>
</style>
<style name="AppTheme.NoActionbar.Translucent">
<item name="android:windowTranslucentStatus">true</item> <item name="android:windowTranslucentStatus">true</item>
</style> </style>
@ -45,7 +48,13 @@
<item name="android:paddingBottom">8dp</item> <item name="android:paddingBottom">8dp</item>
<item name="android:textColor">@color/white</item> <item name="android:textColor">@color/white</item>
<item name="android:textAllCaps">false</item> <item name="android:textAllCaps">false</item>
<item name="android:textSize">@dimen/continue_btn_text_size</item>
<item name="android:background">@drawable/btn_round_blue</item> <item name="android:background">@drawable/btn_round_blue</item>
<item name="android:letterSpacing">0.07</item>
</style>
<style name="DialogActionButtonActive.Welcome">
<item name="android:background">@drawable/btn_round_purple</item>
</style> </style>
<style name="DialogActionButton"> <style name="DialogActionButton">

View file

@ -10,19 +10,19 @@ import android.support.v4.app.FragmentManager
import android.support.v7.widget.AppCompatImageView import android.support.v7.widget.AppCompatImageView
import android.text.Html import android.text.Html
import android.text.TextUtils import android.text.TextUtils
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.view.WindowManager
import android.view.inputmethod.EditorInfo import android.view.inputmethod.EditorInfo
import android.widget.Button import android.widget.*
import android.widget.ImageView
import android.widget.LinearLayout
import android.widget.TextView
import net.osmand.PlatformUtil import net.osmand.PlatformUtil
import net.osmand.telegram.R import net.osmand.telegram.R
import net.osmand.telegram.utils.AndroidUtils import net.osmand.telegram.utils.AndroidUtils
import studio.carbonylgroup.textfieldboxes.ExtendedEditText import studio.carbonylgroup.textfieldboxes.ExtendedEditText
import android.content.Intent
import android.graphics.Rect
import android.net.Uri
import android.view.*
import android.view.ViewGroup
import android.text.Editable
import android.text.TextWatcher
class LoginDialogFragment : DialogFragment() { class LoginDialogFragment : DialogFragment() {
@ -35,10 +35,15 @@ class LoginDialogFragment : DialogFragment() {
private const val LOGIN_DIALOG_TYPE_PARAM_KEY = "login_dialog_type_param" private const val LOGIN_DIALOG_TYPE_PARAM_KEY = "login_dialog_type_param"
private const val SHOW_PROGRESS_PARAM_KEY = "show_progress_param" private const val SHOW_PROGRESS_PARAM_KEY = "show_progress_param"
private const val SHOW_WELCOME_DIALOG_PARAM_KEY = "show_welcome_dialog_param" private const val SHOW_WELCOME_DIALOG_PARAM_KEY = "show_welcome_dialog_param"
private const val TELEGRAM_PLAY_MARKET_LINK = "market://details?id=org.telegram.messenger"
private const val TELEGRAM_NO_PLAY_MARKET_LINK = "https://play.google.com/store/apps/details?id=org.telegram.messenger"
private const val SOFT_KEYBOARD_MIN_DETECTION_SIZE = 0.15
var welcomeDialogShown = false var welcomeDialogShown = false
private set private set
private var softKeyboardShown: Boolean = false
fun showWelcomeDialog(fragmentManager: FragmentManager) { fun showWelcomeDialog(fragmentManager: FragmentManager) {
welcomeDialogShown = true welcomeDialogShown = true
showDialog(fragmentManager, welcomeDialog = true) showDialog(fragmentManager, welcomeDialog = true)
@ -101,12 +106,14 @@ class LoginDialogFragment : DialogFragment() {
ENTER_CODE(R.id.enter_code_layout, R.id.code_edit_text, ENTER_CODE(R.id.enter_code_layout, R.id.code_edit_text,
R.string.enter_code, R.string.authentication_code_descr, R.string.enter_authentication_code), R.string.enter_code, R.string.authentication_code_descr, R.string.enter_authentication_code),
ENTER_PASSWORD(R.id.enter_password_layout, R.id.password_edit_text, ENTER_PASSWORD(R.id.enter_password_layout, R.id.password_edit_text,
R.string.enter_password, R.string.password_descr, R.string.enter_password); R.string.enter_password, R.string.password_descr, R.string.enter_password),
GET_TELEGRAM(R.id.get_telegram_layout, 0,
R.string.get_telegram_title, R.string.get_telegram_description_first, 0);
} }
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
setStyle(DialogFragment.STYLE_NO_FRAME, R.style.AppTheme_NoActionbar) setStyle(DialogFragment.STYLE_NO_FRAME, R.style.AppTheme_NoActionbar_Translucent)
val activity = requireActivity() val activity = requireActivity()
val window = activity.window val window = activity.window
window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE) window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE)
@ -124,6 +131,31 @@ class LoginDialogFragment : DialogFragment() {
} }
val view = inflater.inflate(R.layout.login_dialog, container) val view = inflater.inflate(R.layout.login_dialog, container)
buildDialog(view) buildDialog(view)
view.viewTreeObserver.addOnGlobalLayoutListener {
val r = Rect()
view.getWindowVisibleDisplayFrame(r)
val screenHeight = view.rootView.height
val keypadHeight = screenHeight - r.bottom
val softKeyboardVisible = keypadHeight > screenHeight * SOFT_KEYBOARD_MIN_DETECTION_SIZE
if (!softKeyboardShown && softKeyboardVisible) {
softKeyboardShown = softKeyboardVisible
val continueButton = view?.findViewById<Button>(R.id.continue_button)
if (continueButton?.layoutParams is ViewGroup.MarginLayoutParams) {
val p = continueButton.layoutParams as ViewGroup.MarginLayoutParams
p.setMargins(p.leftMargin, p.topMargin, p.rightMargin, AndroidUtils.dpToPx(context!!, 16F))
continueButton.requestLayout()
}
} else if (softKeyboardShown && !softKeyboardVisible) {
softKeyboardShown = softKeyboardVisible
val continueButton = view?.findViewById<Button>(R.id.continue_button)
if (continueButton?.layoutParams is ViewGroup.MarginLayoutParams) {
val p = continueButton.layoutParams as ViewGroup.MarginLayoutParams
p.setMargins(p.leftMargin, p.topMargin, p.rightMargin, AndroidUtils.dpToPx(context!!, 40F))
continueButton.requestLayout()
}
}
softKeyboardShown = softKeyboardVisible
}
return view return view
} }
@ -186,11 +218,15 @@ class LoginDialogFragment : DialogFragment() {
val titleView: TextView? = view.findViewById(R.id.login_title) val titleView: TextView? = view.findViewById(R.id.login_title)
val descriptionView: TextView? = view.findViewById(R.id.login_description) val descriptionView: TextView? = view.findViewById(R.id.login_description)
val inputTypeDescriptionView: TextView? = view.findViewById(R.id.login_input_type_descr) val inputTypeDescriptionView: TextView? = view.findViewById(R.id.login_input_type_descr)
val inputTypeDescription = getText(t.inputTypeDescriptionId).toString() + ":" if (t.inputTypeDescriptionId != 0) {
val inputTypeDescription = getText(t.inputTypeDescriptionId).toString() + ":"
inputTypeDescriptionView?.text = inputTypeDescription
} else {
inputTypeDescriptionView?.visibility = View.GONE
}
titleView?.text = getText(t.titleId) titleView?.text = getText(t.titleId)
descriptionView?.text = getText(t.descriptionId) descriptionView?.text = getText(t.descriptionId)
inputTypeDescriptionView?.text = inputTypeDescription
layout.visibility = View.VISIBLE layout.visibility = View.VISIBLE
val editText: ExtendedEditText? = layout.findViewById(t.editorId) val editText: ExtendedEditText? = layout.findViewById(t.editorId)
@ -207,22 +243,59 @@ class LoginDialogFragment : DialogFragment() {
AndroidUtils.softKeyboardDelayed(editText) AndroidUtils.softKeyboardDelayed(editText)
focusRequested = true focusRequested = true
} }
editText.addTextChangedListener(object : TextWatcher {
override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) {}
override fun beforeTextChanged(s: CharSequence, start: Int, count: Int, after: Int) {}
override fun afterTextChanged(s: Editable) {
val continueButton: Button? = view.findViewById(R.id.continue_button)
if (s.isEmpty()) {
continueButton?.setBackgroundResource(R.drawable.btn_round_blue)
// continueButton?.set()
} else {
continueButton?.setBackgroundResource(R.drawable.btn_round_purple)
// continueButton?.setTextColor(R.color.secondary_text_light)
}
}
})
} }
val noTelegramViewContainer: LinearLayout? = view.findViewById(R.id.no_telegram) val noTelegramViewContainer: LinearLayout? = view.findViewById(R.id.no_telegram)
if (loginDialogActiveType == LoginDialogType.ENTER_PHONE_NUMBER) { if (loginDialogActiveType == LoginDialogType.ENTER_PHONE_NUMBER) {
val noTelegramAccountTitleView: TextView? = view.findViewById(R.id.no_telegram_title) view.findViewById<TextView>(R.id.no_telegram_title)?.text = getText(R.string.do_not_have_telegram)
val noTelegramAccountButton: ImageView? = view.findViewById(R.id.no_telegram_button) view.findViewById<TextView>(R.id.phone_number_format)?.text = getText(R.string.phone_number_descr)
val phoneNumberFormatHintView: TextView? = view.findViewById(R.id.phone_number_format) view.findViewById<ImageView>(R.id.no_telegram_button)?.setImageResource(R.drawable.ic_arrow_forward)
noTelegramAccountTitleView?.text = getText(R.string.do_not_have_telegram)
phoneNumberFormatHintView?.text = getText(R.string.phone_number_descr)
noTelegramAccountButton?.setImageResource(R.drawable.ic_arrow_forward)
noTelegramViewContainer?.setOnClickListener {
val focusedView = dialog.currentFocus
if (focusedView != null && softKeyboardShown) {
AndroidUtils.hideSoftKeyboard(activity!!, focusedView)
}
updateDialog(LoginDialogType.GET_TELEGRAM, false)
}
noTelegramViewContainer?.visibility = View.VISIBLE noTelegramViewContainer?.visibility = View.VISIBLE
} else { } else {
noTelegramViewContainer?.visibility = View.GONE noTelegramViewContainer?.visibility = View.GONE
} }
val getTelegramViewContainer: LinearLayout? = view.findViewById(R.id.get_telegram_layout)
if (loginDialogActiveType == LoginDialogType.GET_TELEGRAM) {
view.findViewById<TextView>(R.id.get_telegram_description_first)?.text = getText(R.string.get_telegram_description_second)
view.findViewById<TextView>(R.id.get_telegram_description_second)?.text = getText(R.string.get_telegram_description_third)
val getTelegramButton: ImageView? = view.findViewById(R.id.google_play_button)
getTelegramButton?.setImageResource(R.drawable.google_play_badge)
getTelegramButton?.setOnClickListener {
try {
startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(TELEGRAM_PLAY_MARKET_LINK)))
} catch (anfe: android.content.ActivityNotFoundException) {
startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(TELEGRAM_NO_PLAY_MARKET_LINK)))
}
}
view.findViewById<Button>(R.id.continue_button).visibility = View.GONE
getTelegramViewContainer?.visibility = View.VISIBLE
} else {
getTelegramViewContainer?.visibility = View.GONE
view.findViewById<Button>(R.id.continue_button).visibility = View.VISIBLE
}
} }
} }
else -> layout?.visibility = View.GONE else -> layout?.visibility = View.GONE
@ -261,6 +334,10 @@ class LoginDialogFragment : DialogFragment() {
cancelButton?.setOnClickListener { cancelButton?.setOnClickListener {
if (loginDialogActiveType == LoginDialogType.ENTER_PHONE_NUMBER) { if (loginDialogActiveType == LoginDialogType.ENTER_PHONE_NUMBER) {
showWelcomeDialog = true showWelcomeDialog = true
val focusedView = dialog.currentFocus
if (focusedView != null && softKeyboardShown) {
AndroidUtils.hideSoftKeyboard(activity!!, focusedView)
}
buildDialog(view) buildDialog(view)
} else { } else {
showProgress() showProgress()

View file

@ -4,12 +4,15 @@ import android.Manifest
import android.app.Activity import android.app.Activity
import android.content.Context import android.content.Context
import android.content.pm.PackageManager import android.content.pm.PackageManager
import android.content.res.ColorStateList
import android.content.res.Configuration import android.content.res.Configuration
import android.net.Uri import android.net.Uri
import android.os.Build import android.os.Build
import android.support.annotation.AttrRes import android.support.annotation.AttrRes
import android.support.annotation.ColorInt import android.support.annotation.ColorInt
import android.support.annotation.ColorRes
import android.support.v4.app.ActivityCompat import android.support.v4.app.ActivityCompat
import android.support.v4.content.ContextCompat
import android.support.v4.content.FileProvider import android.support.v4.content.FileProvider
import android.util.TypedValue import android.util.TypedValue
import android.util.TypedValue.COMPLEX_UNIT_DIP import android.util.TypedValue.COMPLEX_UNIT_DIP
@ -45,6 +48,37 @@ object AndroidUtils {
} }
} }
fun createCheckedColorStateList(ctx: Context, @ColorRes normal: Int, @ColorRes checked: Int): ColorStateList {
return createCheckedColorStateList(ctx, false, normal, checked, 0, 0)
}
fun createCheckedColorStateList(ctx: Context, night: Boolean,
@ColorRes lightNormal: Int, @ColorRes lightChecked: Int,
@ColorRes darkNormal: Int, @ColorRes darkChecked: Int): ColorStateList {
return createColorStateList(ctx, night, android.R.attr.state_checked,
lightNormal, lightChecked, darkNormal, darkChecked)
}
fun createPressedColorStateList(ctx: Context, @ColorRes normal: Int, @ColorRes pressed: Int): ColorStateList {
return createPressedColorStateList(ctx, false, normal, pressed, 0, 0)
}
fun createPressedColorStateList(ctx: Context, night: Boolean,
@ColorRes lightNormal: Int, @ColorRes lightPressed: Int,
@ColorRes darkNormal: Int, @ColorRes darkPressed: Int): ColorStateList {
return createColorStateList(ctx, night, android.R.attr.state_pressed,
lightNormal, lightPressed, darkNormal, darkPressed)
}
private fun createColorStateList(ctx: Context, night: Boolean, state: Int,
@ColorRes lightNormal: Int, @ColorRes lightState: Int,
@ColorRes darkNormal: Int, @ColorRes darkState: Int): ColorStateList {
return ColorStateList(
arrayOf(intArrayOf(state), intArrayOf()),
intArrayOf(ContextCompat.getColor(ctx, if (night) darkState else lightState), ContextCompat.getColor(ctx, if (night) darkNormal else lightNormal))
)
}
fun isLocationPermissionAvailable(context: Context): Boolean { fun isLocationPermissionAvailable(context: Context): Boolean {
return ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED return ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED
} }