Redesign add email screen

This commit is contained in:
M M Arif 2023-09-25 22:23:52 +05:00
parent 079f118b84
commit 8f4c3e5206
4 changed files with 89 additions and 134 deletions

View File

@ -54,7 +54,8 @@
android:configChanges="orientation|screenSize|smallestScreenSize|density|screenLayout|keyboard|keyboardHidden|navigation"/> android:configChanges="orientation|screenSize|smallestScreenSize|density|screenLayout|keyboard|keyboardHidden|navigation"/>
<activity <activity
android:name=".activities.AccountSettingsEmailActivity" android:name=".activities.AccountSettingsEmailActivity"
android:configChanges="orientation|screenSize|smallestScreenSize|density|screenLayout|keyboard|keyboardHidden|navigation"/> android:configChanges="orientation|screenSize|smallestScreenSize|density|screenLayout|keyboard|keyboardHidden|navigation"
android:windowSoftInputMode="adjustResize"/>
<activity <activity
android:name=".activities.AddCollaboratorToRepositoryActivity" android:name=".activities.AddCollaboratorToRepositoryActivity"
android:configChanges="orientation|screenSize|smallestScreenSize|density|screenLayout|keyboard|keyboardHidden|navigation"/> android:configChanges="orientation|screenSize|smallestScreenSize|density|screenLayout|keyboard|keyboardHidden|navigation"/>
@ -73,7 +74,8 @@
android:configChanges="orientation|screenSize|smallestScreenSize|density|screenLayout|keyboard|keyboardHidden|navigation"/> android:configChanges="orientation|screenSize|smallestScreenSize|density|screenLayout|keyboard|keyboardHidden|navigation"/>
<activity <activity
android:name=".activities.CreateIssueActivity" android:name=".activities.CreateIssueActivity"
android:configChanges="orientation|screenSize|smallestScreenSize|density|screenLayout|keyboard|keyboardHidden|navigation"/> android:configChanges="orientation|screenSize|smallestScreenSize|density|screenLayout|keyboard|keyboardHidden|navigation"
android:windowSoftInputMode="adjustResize"/>
<activity <activity
android:name=".activities.CreateMilestoneActivity" android:name=".activities.CreateMilestoneActivity"
android:configChanges="orientation|screenSize|smallestScreenSize|density|screenLayout|keyboard|keyboardHidden|navigation"/> android:configChanges="orientation|screenSize|smallestScreenSize|density|screenLayout|keyboard|keyboardHidden|navigation"/>

View File

@ -1,11 +1,8 @@
package org.mian.gitnex.activities; package org.mian.gitnex.activities;
import android.content.Context;
import android.os.Bundle; import android.os.Bundle;
import android.util.Log; import android.os.Handler;
import android.util.Patterns; import android.util.Patterns;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
@ -18,8 +15,7 @@ import org.mian.gitnex.clients.RetrofitClient;
import org.mian.gitnex.databinding.ActivityAccountSettingsEmailBinding; import org.mian.gitnex.databinding.ActivityAccountSettingsEmailBinding;
import org.mian.gitnex.fragments.AccountSettingsEmailsFragment; import org.mian.gitnex.fragments.AccountSettingsEmailsFragment;
import org.mian.gitnex.helpers.AlertDialogs; import org.mian.gitnex.helpers.AlertDialogs;
import org.mian.gitnex.helpers.AppUtil; import org.mian.gitnex.helpers.SnackBar;
import org.mian.gitnex.helpers.Toasty;
import retrofit2.Call; import retrofit2.Call;
import retrofit2.Callback; import retrofit2.Callback;
@ -28,8 +24,6 @@ import retrofit2.Callback;
*/ */
public class AccountSettingsEmailActivity extends BaseActivity { public class AccountSettingsEmailActivity extends BaseActivity {
private View.OnClickListener onClickListener;
private final View.OnClickListener addEmailListener = v -> processAddNewEmail();
private ActivityAccountSettingsEmailBinding activityAccountSettingsEmailBinding; private ActivityAccountSettingsEmailBinding activityAccountSettingsEmailBinding;
@Override @Override
@ -41,56 +35,42 @@ public class AccountSettingsEmailActivity extends BaseActivity {
ActivityAccountSettingsEmailBinding.inflate(getLayoutInflater()); ActivityAccountSettingsEmailBinding.inflate(getLayoutInflater());
setContentView(activityAccountSettingsEmailBinding.getRoot()); setContentView(activityAccountSettingsEmailBinding.getRoot());
boolean connToInternet = AppUtil.hasNetworkConnection(appCtx); activityAccountSettingsEmailBinding.topAppBar.setNavigationOnClickListener(v -> finish());
InputMethodManager imm = activityAccountSettingsEmailBinding.topAppBar.setOnMenuItemClickListener(
(InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); menuItem -> {
int id = menuItem.getItemId();
activityAccountSettingsEmailBinding.userEmail.requestFocus(); if (id == R.id.save) {
assert imm != null; processAddNewEmail();
imm.showSoftInput( return true;
activityAccountSettingsEmailBinding.userEmail, InputMethodManager.SHOW_IMPLICIT); } else {
return super.onOptionsItemSelected(menuItem);
initCloseListener(); }
activityAccountSettingsEmailBinding.close.setOnClickListener(onClickListener); });
if (!connToInternet) {
disableProcessButton();
} else {
activityAccountSettingsEmailBinding.addEmailButton.setOnClickListener(addEmailListener);
}
} }
private void processAddNewEmail() { private void processAddNewEmail() {
boolean connToInternet = AppUtil.hasNetworkConnection(appCtx);
String newUserEmail = String newUserEmail =
Objects.requireNonNull(activityAccountSettingsEmailBinding.userEmail.getText()) Objects.requireNonNull(activityAccountSettingsEmailBinding.userEmail.getText())
.toString() .toString()
.trim(); .trim();
if (!connToInternet) {
Toasty.error(ctx, getResources().getString(R.string.checkNetConnection));
return;
}
if (newUserEmail.equals("")) { if (newUserEmail.equals("")) {
Toasty.error(ctx, getString(R.string.emailErrorEmpty)); SnackBar.error(
ctx, findViewById(android.R.id.content), getString(R.string.emailErrorEmpty));
return; return;
} else if (!Patterns.EMAIL_ADDRESS.matcher(newUserEmail).matches()) { } else if (!Patterns.EMAIL_ADDRESS.matcher(newUserEmail).matches()) {
Toasty.warning(ctx, getString(R.string.emailErrorInvalid)); SnackBar.error(
ctx, findViewById(android.R.id.content), getString(R.string.emailErrorInvalid));
return; return;
} }
List<String> newEmailList = new ArrayList<>(Arrays.asList(newUserEmail.split(","))); List<String> newEmailList = new ArrayList<>(Arrays.asList(newUserEmail.split(",")));
disableProcessButton();
addNewEmail(newEmailList); addNewEmail(newEmailList);
} }
@ -111,54 +91,44 @@ public class AccountSettingsEmailActivity extends BaseActivity {
if (response.code() == 201) { if (response.code() == 201) {
Toasty.success(ctx, getString(R.string.emailAddedText)); SnackBar.info(
ctx,
findViewById(android.R.id.content),
getString(R.string.emailAddedText));
AccountSettingsEmailsFragment.refreshEmails = true; AccountSettingsEmailsFragment.refreshEmails = true;
enableProcessButton(); new Handler().postDelayed(() -> finish(), 3000);
finish();
} else if (response.code() == 401) { } else if (response.code() == 401) {
enableProcessButton();
AlertDialogs.authorizationTokenRevokedDialog(ctx); AlertDialogs.authorizationTokenRevokedDialog(ctx);
} else if (response.code() == 403) { } else if (response.code() == 403) {
enableProcessButton(); SnackBar.error(
Toasty.error(ctx, ctx.getString(R.string.authorizeError)); ctx,
findViewById(android.R.id.content),
getString(R.string.authorizeError));
} else if (response.code() == 404) { } else if (response.code() == 404) {
enableProcessButton(); SnackBar.error(
Toasty.warning(ctx, ctx.getString(R.string.apiNotFound)); ctx,
findViewById(android.R.id.content),
getString(R.string.apiNotFound));
} else if (response.code() == 422) { } else if (response.code() == 422) {
enableProcessButton(); SnackBar.error(
Toasty.warning(ctx, ctx.getString(R.string.emailErrorInUse)); ctx,
findViewById(android.R.id.content),
getString(R.string.emailErrorInUse));
} else { } else {
enableProcessButton(); SnackBar.error(
Toasty.error(ctx, getString(R.string.genericError)); ctx,
findViewById(android.R.id.content),
getString(R.string.genericError));
} }
} }
@Override @Override
public void onFailure(@NonNull Call<List<Email>> call, @NonNull Throwable t) { public void onFailure(@NonNull Call<List<Email>> call, @NonNull Throwable t) {}
Log.e("onFailure", t.toString());
enableProcessButton();
}
}); });
} }
private void initCloseListener() {
onClickListener = view -> finish();
}
private void disableProcessButton() {
activityAccountSettingsEmailBinding.addEmailButton.setEnabled(false);
}
private void enableProcessButton() {
activityAccountSettingsEmailBinding.addEmailButton.setEnabled(true);
}
} }

View File

@ -1,72 +1,63 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" <androidx.coordinatorlayout.widget.CoordinatorLayout
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:background="?attr/primaryBackgroundColor" android:background="?attr/primaryBackgroundColor"
android:orientation="vertical"> xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<com.google.android.material.appbar.AppBarLayout <com.google.android.material.appbar.AppBarLayout
android:id="@+id/appbar" android:id="@+id/appBarLayout"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:theme="@style/Widget.AppCompat.SearchView" android:background="?attr/primaryBackgroundColor"
app:elevation="@dimen/dimen0dp"> android:fitsSystemWindows="true">
<com.google.android.material.appbar.MaterialToolbar <com.google.android.material.appbar.CollapsingToolbarLayout
android:id="@+id/toolbar" style="?attr/collapsingToolbarLayoutLargeStyle"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" app:layout_scrollFlags="scroll|exitUntilCollapsed|snap"
android:background="?attr/primaryBackgroundColor" app:contentScrim="?attr/primaryBackgroundColor"
tools:ignore="UnusedAttribute"> android:layout_height="?attr/collapsingToolbarLayoutLargeSize">
<ImageView <com.google.android.material.appbar.MaterialToolbar
android:id="@+id/close" android:id="@+id/topAppBar"
android:layout_width="@dimen/dimen26dp" android:layout_width="match_parent"
android:layout_height="@dimen/dimen26dp" android:elevation="0dp"
android:layout_marginStart="@dimen/dimen16dp" android:layout_height="?attr/actionBarSize"
android:layout_marginEnd="@dimen/dimen16dp" app:title="@string/pageTitleAddEmail"
android:background="?android:attr/selectableItemBackgroundBorderless" app:layout_collapseMode="pin"
android:clickable="true" app:menu="@menu/save"
android:contentDescription="@string/close" app:navigationIcon="@drawable/ic_close" />
android:focusable="true"
android:gravity="center_vertical"
android:src="@drawable/ic_close"/>
<TextView </com.google.android.material.appbar.CollapsingToolbarLayout>
android:id="@+id/toolbar_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:maxLines="1"
android:text="@string/pageTitleAddEmail"
android:textColor="?attr/primaryTextColor"
android:textSize="@dimen/dimen20sp"/>
</com.google.android.material.appbar.MaterialToolbar>
</com.google.android.material.appbar.AppBarLayout> </com.google.android.material.appbar.AppBarLayout>
<LinearLayout <androidx.core.widget.NestedScrollView
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="match_parent"
android:orientation="vertical" app:layout_behavior="@string/appbar_scrolling_view_behavior">
android:padding="@dimen/dimen16dp">
<com.google.android.material.textfield.TextInputLayout <LinearLayout
android:id="@+id/userEmailLayout" 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_marginTop="@dimen/dimen8dp" android:padding="@dimen/dimen16dp">
android:layout_marginBottom="@dimen/dimen8dp"
android:hint="@string/accountEmailTitle" <com.google.android.material.textfield.TextInputLayout
android:textColorHint="?attr/hintColor" android:id="@+id/userEmailLayout"
app:boxBackgroundColor="?attr/inputBackgroundColor" android:layout_width="match_parent"
app:boxStrokeErrorColor="@color/darkRed" android:layout_height="wrap_content"
app:endIconMode="clear_text" android:layout_marginTop="@dimen/dimen8dp"
app:endIconTint="?attr/iconsColor" android:layout_marginBottom="@dimen/dimen8dp"
app:hintTextColor="?attr/hintColor"> android:hint="@string/accountEmailTitle"
android:textColorHint="?attr/hintColor"
app:boxBackgroundColor="?attr/inputBackgroundColor"
app:boxStrokeErrorColor="@color/darkRed"
app:endIconMode="clear_text"
app:endIconTint="?attr/iconsColor"
app:hintTextColor="?attr/hintColor">
<com.google.android.material.textfield.TextInputEditText <com.google.android.material.textfield.TextInputEditText
android:id="@+id/userEmail" android:id="@+id/userEmail"
@ -79,15 +70,8 @@
</com.google.android.material.textfield.TextInputLayout> </com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.button.MaterialButton </LinearLayout>
android:id="@+id/addEmailButton"
android:layout_width="match_parent"
android:layout_height="@dimen/dimen54dp"
android:layout_marginTop="@dimen/dimen8dp"
android:text="@string/saveButton"
android:textColor="?attr/materialCardBackgroundColor"
android:textStyle="bold"/>
</LinearLayout> </androidx.core.widget.NestedScrollView>
</LinearLayout> </androidx.coordinatorlayout.widget.CoordinatorLayout>

View File

@ -5,7 +5,6 @@
<item <item
android:id="@+id/save" android:id="@+id/save"
android:icon="@drawable/ic_save"
android:orderInCategory="1" android:orderInCategory="1"
android:title="@string/saveButton" android:title="@string/saveButton"
app:showAsAction="ifRoom"/> app:showAsAction="ifRoom"/>