Merge branch '318-conversation-avatar-animation' into 'master'

Disable Conversation Exit Transition and Animate Bulb

Works-around #318

See merge request !193
This commit is contained in:
Torsten Grote
2016-05-16 13:22:04 +00:00
7 changed files with 54 additions and 20 deletions

View File

@@ -11,7 +11,6 @@
android:id="@+id/contactAvatar" android:id="@+id/contactAvatar"
android:layout_width="30dp" android:layout_width="30dp"
android:layout_height="30dp" android:layout_height="30dp"
android:transitionName="avatar"
app:civ_border_color="@color/action_bar_text" app:civ_border_color="@color/action_bar_text"
app:civ_border_width="@dimen/avatar_border_width" app:civ_border_width="@dimen/avatar_border_width"
tools:src="@drawable/ic_launcher"/> tools:src="@drawable/ic_launcher"/>
@@ -22,7 +21,7 @@
android:layout_height="15dp" android:layout_height="15dp"
android:layout_gravity="bottom|right" android:layout_gravity="bottom|right"
android:scaleType="fitCenter" android:scaleType="fitCenter"
tools:src="@drawable/contact_online" tools:ignore="ContentDescription"
tools:ignore="ContentDescription"/> tools:src="@drawable/contact_online"/>
</FrameLayout> </FrameLayout>

View File

@@ -10,9 +10,9 @@
<RelativeLayout <RelativeLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:paddingTop="@dimen/listitem_horizontal_margin"
android:paddingBottom="@dimen/listitem_horizontal_margin"
android:background="?attr/selectableItemBackground" android:background="?attr/selectableItemBackground"
android:paddingBottom="@dimen/listitem_horizontal_margin"
android:paddingTop="@dimen/listitem_horizontal_margin"
> >
<de.hdodenhof.circleimageview.CircleImageView <de.hdodenhof.circleimageview.CircleImageView
@@ -24,7 +24,6 @@
android:layout_centerVertical="true" android:layout_centerVertical="true"
android:layout_marginLeft="@dimen/listitem_horizontal_margin" android:layout_marginLeft="@dimen/listitem_horizontal_margin"
android:layout_marginStart="@dimen/listitem_horizontal_margin" android:layout_marginStart="@dimen/listitem_horizontal_margin"
android:transitionName="avatar"
app:civ_border_color="@color/briar_primary" app:civ_border_color="@color/briar_primary"
app:civ_border_width="@dimen/avatar_border_width" app:civ_border_width="@dimen/avatar_border_width"
tools:src="@drawable/ic_launcher"/> tools:src="@drawable/ic_launcher"/>
@@ -33,13 +32,13 @@
android:id="@+id/textViews" android:id="@+id/textViews"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_centerVertical="true" android:layout_centerVertical="true"
android:layout_marginLeft="@dimen/listitem_horizontal_margin" android:layout_marginLeft="@dimen/listitem_horizontal_margin"
android:layout_marginStart="@dimen/listitem_horizontal_margin" android:layout_marginStart="@dimen/listitem_horizontal_margin"
android:layout_toEndOf="@+id/avatarView"
android:layout_toLeftOf="@+id/bulbView" android:layout_toLeftOf="@+id/bulbView"
android:layout_toRightOf="@+id/avatarView" android:layout_toRightOf="@+id/avatarView"
android:layout_toEndOf="@+id/avatarView"> android:orientation="vertical">
<TextView <TextView
android:id="@+id/nameView" android:id="@+id/nameView"

View File

@@ -1,6 +1,7 @@
package org.briarproject.android.contact; package org.briarproject.android.contact;
import android.content.Context; import android.content.Context;
import android.support.v4.view.ViewCompat;
import android.support.v7.util.SortedList; import android.support.v7.util.SortedList;
import android.support.v7.widget.RecyclerView; import android.support.v7.widget.RecyclerView;
import android.view.View; import android.view.View;
@@ -11,6 +12,7 @@ import android.widget.TextView;
import org.briarproject.R; import org.briarproject.R;
import org.briarproject.api.contact.ContactId; import org.briarproject.api.contact.ContactId;
import org.briarproject.api.identity.Author; import org.briarproject.api.identity.Author;
import org.briarproject.util.StringUtils;
import java.util.List; import java.util.List;
@@ -48,6 +50,9 @@ public abstract class BaseContactListAdapter<VH extends BaseContactListAdapter.B
if (listener != null) listener.onItemClick(ui.avatar, item); if (listener != null) listener.onItemClick(ui.avatar, item);
} }
}); });
ViewCompat.setTransitionName(ui.avatar, "avatar" +
StringUtils.toHexString(item.getGroupId().getBytes()));
} }
@Override @Override

View File

@@ -2,6 +2,7 @@ package org.briarproject.android.contact;
import android.content.Context; import android.content.Context;
import android.support.v4.content.ContextCompat; import android.support.v4.content.ContextCompat;
import android.support.v4.view.ViewCompat;
import android.text.format.DateUtils; import android.text.format.DateUtils;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
@@ -10,6 +11,7 @@ import android.widget.ImageView;
import android.widget.TextView; import android.widget.TextView;
import org.briarproject.R; import org.briarproject.R;
import org.briarproject.util.StringUtils;
public class ContactListAdapter public class ContactListAdapter
extends BaseContactListAdapter<ContactListAdapter.ContactHolder> { extends BaseContactListAdapter<ContactListAdapter.ContactHolder> {
@@ -62,6 +64,9 @@ public class ContactListAdapter
} else { } else {
ui.bulb.setImageResource(R.drawable.contact_disconnected); ui.bulb.setImageResource(R.drawable.contact_disconnected);
} }
ViewCompat.setTransitionName(ui.bulb,
"bulb" + StringUtils.toHexString(item.getGroupId().getBytes()));
} }
protected static class ContactHolder protected static class ContactHolder

View File

@@ -1,11 +1,13 @@
package org.briarproject.android.contact; package org.briarproject.android.contact;
import android.content.Intent; import android.content.Intent;
import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import android.support.design.widget.FloatingActionButton; import android.support.design.widget.FloatingActionButton;
import android.support.v4.app.ActivityCompat;
import android.support.v4.app.ActivityOptionsCompat; import android.support.v4.app.ActivityOptionsCompat;
import android.support.v4.util.Pair;
import android.support.v4.view.ViewCompat;
import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.LinearLayoutManager;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
@@ -48,6 +50,7 @@ import java.util.logging.Logger;
import javax.inject.Inject; import javax.inject.Inject;
import static android.support.v4.app.ActivityOptionsCompat.makeSceneTransitionAnimation;
import static java.util.logging.Level.INFO; import static java.util.logging.Level.INFO;
import static java.util.logging.Level.WARNING; import static java.util.logging.Level.WARNING;
import static org.briarproject.android.BriarActivity.GROUP_ID; import static org.briarproject.android.BriarActivity.GROUP_ID;
@@ -107,16 +110,22 @@ public class ContactListFragment extends BaseFragment implements EventListener {
ConversationActivity.class); ConversationActivity.class);
i.putExtra(GROUP_ID, groupId.getBytes()); i.putExtra(GROUP_ID, groupId.getBytes());
if (Build.VERSION.SDK_INT >= 16) { ContactListAdapter.ContactHolder holder =
ActivityOptionsCompat options = (ContactListAdapter.ContactHolder) list
ActivityOptionsCompat. .getRecyclerView()
makeSceneTransitionAnimation( .findViewHolderForAdapterPosition(
getActivity(), adapter.findItemPosition(item));
view, "avatar"); Pair<View, String> avatar =
getActivity().startActivity(i, options.toBundle()); Pair.create((View) holder.avatar, ViewCompat
} else { .getTransitionName(holder.avatar));
startActivity(i); Pair<View, String> bulb =
} Pair.create((View) holder.bulb, ViewCompat
.getTransitionName(holder.bulb));
ActivityOptionsCompat options =
makeSceneTransitionAnimation(getActivity(),
avatar, bulb);
ActivityCompat.startActivity(getActivity(), i,
options.toBundle());
} }
}; };

View File

@@ -6,6 +6,7 @@ import android.os.Bundle;
import android.support.v4.app.ActivityCompat; import android.support.v4.app.ActivityCompat;
import android.support.v4.app.ActivityOptionsCompat; import android.support.v4.app.ActivityOptionsCompat;
import android.support.v4.content.ContextCompat; import android.support.v4.content.ContextCompat;
import android.support.v4.view.ViewCompat;
import android.support.v7.app.ActionBar; import android.support.v7.app.ActionBar;
import android.support.v7.app.AlertDialog; import android.support.v7.app.AlertDialog;
import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.LinearLayoutManager;
@@ -156,6 +157,10 @@ public class ConversationActivity extends BriarActivity
ab.setDisplayShowTitleEnabled(false); ab.setDisplayShowTitleEnabled(false);
} }
String hexGroupId = StringUtils.toHexString(b);
ViewCompat.setTransitionName(toolbarAvatar, "avatar" + hexGroupId);
ViewCompat.setTransitionName(toolbarStatus, "bulb" + hexGroupId);
adapter = new ConversationAdapter(this, this); adapter = new ConversationAdapter(this, this);
list = (BriarRecyclerView) findViewById(R.id.conversationView); list = (BriarRecyclerView) findViewById(R.id.conversationView);
list.setLayoutManager(new LinearLayoutManager(this)); list.setLayoutManager(new LinearLayoutManager(this));
@@ -207,7 +212,7 @@ public class ConversationActivity extends BriarActivity
// Handle presses on the action bar items // Handle presses on the action bar items
switch (item.getItemId()) { switch (item.getItemId()) {
case android.R.id.home: case android.R.id.home:
supportFinishAfterTransition(); onBackPressed();
return true; return true;
case R.id.action_introduction: case R.id.action_introduction:
if (contactId == null) return false; if (contactId == null) return false;
@@ -227,6 +232,13 @@ public class ConversationActivity extends BriarActivity
} }
} }
@Override
public void onBackPressed() {
// FIXME disabled exit transition, because it doesn't work for some reason
//supportFinishAfterTransition();
finish();
}
private void loadData() { private void loadData() {
runOnDbThread(new Runnable() { runOnDbThread(new Runnable() {
@Override @Override

View File

@@ -131,4 +131,9 @@ public class BriarRecyclerView extends FrameLayout {
if (recyclerView == null) initViews(); if (recyclerView == null) initViews();
recyclerView.scrollToPosition(position); recyclerView.scrollToPosition(position);
} }
public RecyclerView getRecyclerView() {
return this.recyclerView;
}
} }