[android] Implemented custom bookmark backup view

This commit is contained in:
Александр Зацепин 2018-02-07 16:08:55 +03:00 committed by Arsentiy Milchakov
parent c2d0cd8906
commit 4ea02c36fe
5 changed files with 164 additions and 9 deletions

View file

@ -9,8 +9,10 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<!-- TODO move backup layout into recyclerview -->
<include layout="@layout/item_bookmark_backup"/>
<com.mapswithme.maps.widget.BookmarkBackupView
android:id="@+id/backup"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<include layout="@layout/recycler_default"/>
</LinearLayout>

View file

@ -18,14 +18,13 @@
android:paddingTop="@dimen/margin_half_plus"
android:paddingBottom="@dimen/margin_half_plus">
<TextView
android:id="@+id/title"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:textAppearance="@style/MwmTextAppearance.Body3"
android:textAllCaps="true"
android:gravity="start|center_vertical"
android:drawableRight="@drawable/ic_expand_less"
android:drawableEnd="@drawable/ic_expand_less"
android:text="@string/settings_backup_bookmarks"/>
</LinearLayout>
<include layout="@layout/divider_horizontal"/>
@ -36,6 +35,7 @@
android:orientation="vertical"
android:padding="@dimen/margin_base">
<TextView
android:id="@+id/message"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="@style/MwmTextAppearance.Body3"
@ -53,7 +53,7 @@
android:paddingEnd="@dimen/margin_half"
android:paddingRight="@dimen/margin_half"
android:layout_marginTop="@dimen/margin_base"
android:layout_marginBottom="@dimen/margin_base"
android:layout_marginBottom="@dimen/margin_half"
android:layout_gravity="center"
tools:text="@string/authorization_button_sign_in"/>
</LinearLayout>

View file

@ -7,6 +7,7 @@
android:background="?clickableBackground"
android:gravity="center_vertical"
android:minHeight="@dimen/height_item_oneline"
android:layout_marginTop="@dimen/margin_half"
android:paddingEnd="@dimen/margin_base"
android:paddingLeft="0dp"
android:paddingRight="@dimen/margin_base"

View file

@ -78,11 +78,15 @@ public class BookmarkCategoriesFragment extends BaseMwmRecyclerFragment
private void updateResultsPlaceholder()
{
boolean showLoadingPlaceholder = BookmarkManager.nativeIsAsyncBookmarksLoadingInProgress();
boolean showPlaceHolder = !showLoadingPlaceholder &&
(getAdapter() == null || getAdapter().getItemCount() == 0);
if (getAdapter() != null)
{
boolean showLoadingPlaceholder = BookmarkManager.nativeIsAsyncBookmarksLoadingInProgress();
showPlaceholder(!showLoadingPlaceholder && getAdapter().getItemCount() == 0);
}
showPlaceholder(showPlaceHolder);
View root = getView();
if (root != null)
UiUtils.showIf(!showLoadingPlaceholder && !showPlaceHolder, root, R.id.backup);
}
private void updateLoadingPlaceholder()

View file

@ -0,0 +1,148 @@
package com.mapswithme.maps.widget;
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.ObjectAnimator;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.mapswithme.maps.R;
import com.mapswithme.util.Graphics;
import com.mapswithme.util.UiUtils;
public class BookmarkBackupView extends LinearLayout
{
private final static int ANIMATION_DURATION = 300;
@SuppressWarnings("NullableProblems")
@NonNull
private View mHeader;
@SuppressWarnings("NullableProblems")
@NonNull
private View mContentLayout;
@SuppressWarnings("NullableProblems")
@NonNull
private TextView mTitle;
@NonNull
private final OnClickListener mHeaderClickListener = v -> onHeaderClick();
private boolean mExpanded = false;
public BookmarkBackupView(Context context)
{
super(context);
init();
}
public BookmarkBackupView(Context context, @Nullable AttributeSet attrs)
{
super(context, attrs);
init();
}
public BookmarkBackupView(Context context, @Nullable AttributeSet attrs, int defStyleAttr)
{
super(context, attrs, defStyleAttr);
init();
}
private void init()
{
LayoutInflater.from(getContext()).inflate(R.layout.item_bookmark_backup, this);
mHeader = findViewById(R.id.header);
mContentLayout = findViewById(R.id.content);
UiUtils.showIf(mExpanded, mContentLayout);
mTitle = mHeader.findViewById(R.id.title);
mTitle.setCompoundDrawablesWithIntrinsicBounds(null, null, getToggle(), null);
mHeader.setOnClickListener(mHeaderClickListener);
}
private void onHeaderClick()
{
mExpanded = !mExpanded;
Animator animator = mExpanded ? createFadeInAnimator() : createFadeOutAnimator();
animator.setDuration(ANIMATION_DURATION);
animator.start();
mTitle.setCompoundDrawablesWithIntrinsicBounds(null, null, getToggle(), null);
}
@NonNull
private Animator createFadeInAnimator()
{
ObjectAnimator animator = ObjectAnimator.ofFloat(mContentLayout, "alpha",
0, 1f);
animator.addListener(new AnimatorListenerAdapter()
{
@Override
public void onAnimationStart(Animator animation)
{
UiUtils.show(mContentLayout);
mHeader.setEnabled(false);
}
@Override
public void onAnimationEnd(Animator animation)
{
mHeader.setEnabled(true);
}
});
return animator;
}
@NonNull
private Animator createFadeOutAnimator()
{
ObjectAnimator animator = ObjectAnimator.ofFloat(mContentLayout, "alpha",
1f, 0);
animator.addListener(new AnimatorListenerAdapter()
{
@Override
public void onAnimationStart(Animator animation)
{
mHeader.setEnabled(false);
}
@Override
public void onAnimationEnd(Animator animation)
{
UiUtils.hide(mContentLayout);
mHeader.setEnabled(true);
}
});
return animator;
}
@NonNull
private Drawable getToggle()
{
return Graphics.tint(getContext(),
mExpanded ? R.drawable.ic_expand_less : R.drawable.ic_expand_more,
R.attr.secondary);
}
public void setMessage(@NonNull String msg)
{
TextView message = mContentLayout.findViewById(R.id.message);
message.setText(msg);
}
public void setButtonLabel(@NonNull String label)
{
TextView button = mContentLayout.findViewById(R.id.button);
button.setText(label);
}
public void setClickListener(@Nullable OnClickListener listener)
{
mContentLayout.findViewById(R.id.button).setOnClickListener(listener);
}
}