Commit 36f4150b authored by Grigory Fedorov's avatar Grigory Fedorov

Action buttons style accounts panel, instead of toolbar panel.

Old ic_status_account icons removed. AccountToggleAdapter removed.
parent 7e70febb
...@@ -26,5 +26,6 @@ dependencies { ...@@ -26,5 +26,6 @@ dependencies {
compile 'com.android.support:appcompat-v7:22.0.0' compile 'com.android.support:appcompat-v7:22.0.0'
compile 'com.android.support:support-v13:22.0.0' compile 'com.android.support:support-v13:22.0.0'
compile 'com.github.ksoichiro:android-observablescrollview:1.5.0' compile 'com.github.ksoichiro:android-observablescrollview:1.5.0'
compile 'de.hdodenhof:circleimageview:1.2.2'
compile project('otr4j') compile project('otr4j')
} }
...@@ -26,16 +26,13 @@ import android.os.Bundle; ...@@ -26,16 +26,13 @@ import android.os.Bundle;
import android.os.Handler; import android.os.Handler;
import android.support.v4.app.Fragment; import android.support.v4.app.Fragment;
import android.support.v4.view.MenuItemCompat; import android.support.v4.view.MenuItemCompat;
import android.support.v7.app.ActionBar;
import android.support.v7.widget.Toolbar; import android.support.v7.widget.Toolbar;
import android.view.ContextMenu; import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo; import android.view.ContextMenu.ContextMenuInfo;
import android.view.LayoutInflater;
import android.view.Menu; import android.view.Menu;
import android.view.MenuItem; import android.view.MenuItem;
import android.view.View; import android.view.View;
import android.view.inputmethod.InputMethodManager; import android.view.inputmethod.InputMethodManager;
import android.widget.LinearLayout;
import android.widget.SearchView; import android.widget.SearchView;
import android.widget.Toast; import android.widget.Toast;
...@@ -57,7 +54,6 @@ import com.xabber.android.data.roster.AbstractContact; ...@@ -57,7 +54,6 @@ import com.xabber.android.data.roster.AbstractContact;
import com.xabber.android.data.roster.RosterContact; import com.xabber.android.data.roster.RosterContact;
import com.xabber.android.data.roster.RosterManager; import com.xabber.android.data.roster.RosterManager;
import com.xabber.android.ui.ContactListFragment.OnContactClickListener; import com.xabber.android.ui.ContactListFragment.OnContactClickListener;
import com.xabber.android.ui.adapter.AccountToggleAdapter;
import com.xabber.android.ui.dialog.AccountChooseDialogFragment; import com.xabber.android.ui.dialog.AccountChooseDialogFragment;
import com.xabber.android.ui.dialog.AccountChooseDialogFragment.OnChoosedListener; import com.xabber.android.ui.dialog.AccountChooseDialogFragment.OnChoosedListener;
import com.xabber.android.ui.dialog.ContactIntegrationDialogFragment; import com.xabber.android.ui.dialog.ContactIntegrationDialogFragment;
...@@ -93,11 +89,6 @@ public class ContactList extends ManagedActivity implements OnAccountChangedList ...@@ -93,11 +89,6 @@ public class ContactList extends ManagedActivity implements OnAccountChangedList
private static final String CONTACT_LIST_TAG = "CONTACT_LIST"; private static final String CONTACT_LIST_TAG = "CONTACT_LIST";
/**
* Adapter for account list.
*/
private AccountToggleAdapter accountToggleAdapter;
/** /**
* Current action. * Current action.
*/ */
...@@ -109,7 +100,6 @@ public class ContactList extends ManagedActivity implements OnAccountChangedList ...@@ -109,7 +100,6 @@ public class ContactList extends ManagedActivity implements OnAccountChangedList
private String sendText; private String sendText;
private SearchView searchView; private SearchView searchView;
private View actionBarView;
@Override @Override
public void onCreate(Bundle savedInstanceState) { public void onCreate(Bundle savedInstanceState) {
...@@ -130,21 +120,6 @@ public class ContactList extends ManagedActivity implements OnAccountChangedList ...@@ -130,21 +120,6 @@ public class ContactList extends ManagedActivity implements OnAccountChangedList
setTitle(getString(R.string.production_title)); setTitle(getString(R.string.production_title));
ActionBar actionBar = getSupportActionBar();
actionBar.setDisplayShowTitleEnabled(false);
actionBar.setDisplayShowHomeEnabled(false);
actionBar.setDisplayHomeAsUpEnabled(false);
actionBar.setDisplayShowCustomEnabled(true);
actionBarView = LayoutInflater.from(this).inflate(R.layout.contact_list_action_bar, null);
actionBarView.setOnClickListener(this);
actionBar.setCustomView(actionBarView, new ActionBar.LayoutParams(
ActionBar.LayoutParams.MATCH_PARENT, ActionBar.LayoutParams.MATCH_PARENT));
accountToggleAdapter = new AccountToggleAdapter(this, this,
(LinearLayout) actionBarView.findViewById(R.id.account_list));
if (savedInstanceState != null) { if (savedInstanceState != null) {
sendText = savedInstanceState.getString(SAVED_SEND_TEXT); sendText = savedInstanceState.getString(SAVED_SEND_TEXT);
action = savedInstanceState.getString(SAVED_ACTION); action = savedInstanceState.getString(SAVED_ACTION);
...@@ -458,22 +433,6 @@ public class ContactList extends ManagedActivity implements OnAccountChangedList ...@@ -458,22 +433,6 @@ public class ContactList extends ManagedActivity implements OnAccountChangedList
case android.R.id.title: case android.R.id.title:
getContactListFragment().scrollUp(); getContactListFragment().scrollUp();
break; break;
default:
String account = accountToggleAdapter.getItemForView(view);
if (account == null) { // Check for tap on account in the title
break;
}
if (!SettingsManager.contactsShowAccounts()) {
if (AccountManager.getInstance().getAccounts().size() < 2) {
getContactListFragment().scrollUp();
} else {
getContactListFragment().setSelectedAccount(account);
rebuildAccountToggle();
}
} else {
getContactListFragment().scrollTo(account);
}
break;
} }
} }
...@@ -537,7 +496,7 @@ public class ContactList extends ManagedActivity implements OnAccountChangedList ...@@ -537,7 +496,7 @@ public class ContactList extends ManagedActivity implements OnAccountChangedList
@Override @Override
public void onAccountsChanged(Collection<String> accounts) { public void onAccountsChanged(Collection<String> accounts) {
accountToggleAdapter.onChange(); ((ContactListFragment)getSupportFragmentManager().findFragmentById(R.id.container)).onAccountsChanged();
} }
@Override @Override
...@@ -546,14 +505,7 @@ public class ContactList extends ManagedActivity implements OnAccountChangedList ...@@ -546,14 +505,7 @@ public class ContactList extends ManagedActivity implements OnAccountChangedList
} }
private void rebuildAccountToggle() { private void rebuildAccountToggle() {
accountToggleAdapter.rebuild(); ((ContactListFragment)getSupportFragmentManager().findFragmentById(R.id.container)).rebuild();
if (SettingsManager.contactsShowPanel() && accountToggleAdapter.getCount() > 0) {
getSupportActionBar().setDisplayShowTitleEnabled(false);
actionBarView.setVisibility(View.VISIBLE);
} else {
actionBarView.setVisibility(View.GONE);
getSupportActionBar().setDisplayShowTitleEnabled(true);
}
} }
public static Intent createPersistentIntent(Context context) { public static Intent createPersistentIntent(Context context) {
......
...@@ -17,6 +17,7 @@ import android.widget.AdapterView.AdapterContextMenuInfo; ...@@ -17,6 +17,7 @@ import android.widget.AdapterView.AdapterContextMenuInfo;
import android.widget.AdapterView.OnItemClickListener; import android.widget.AdapterView.OnItemClickListener;
import android.widget.Button; import android.widget.Button;
import android.widget.Filterable; import android.widget.Filterable;
import android.widget.LinearLayout;
import android.widget.ListView; import android.widget.ListView;
import android.widget.TextView; import android.widget.TextView;
...@@ -32,6 +33,7 @@ import com.xabber.android.data.message.OnChatChangedListener; ...@@ -32,6 +33,7 @@ import com.xabber.android.data.message.OnChatChangedListener;
import com.xabber.android.data.roster.AbstractContact; import com.xabber.android.data.roster.AbstractContact;
import com.xabber.android.data.roster.OnContactChangedListener; import com.xabber.android.data.roster.OnContactChangedListener;
import com.xabber.android.ui.adapter.AccountConfiguration; import com.xabber.android.ui.adapter.AccountConfiguration;
import com.xabber.android.ui.adapter.AccountActionButtonsAdapter;
import com.xabber.android.ui.adapter.ContactListAdapter; import com.xabber.android.ui.adapter.ContactListAdapter;
import com.xabber.android.ui.adapter.ContactListAdapter.OnContactListChangedListener; import com.xabber.android.ui.adapter.ContactListAdapter.OnContactListChangedListener;
import com.xabber.android.ui.adapter.ContactListState; import com.xabber.android.ui.adapter.ContactListState;
...@@ -45,7 +47,7 @@ import java.util.Collection; ...@@ -45,7 +47,7 @@ import java.util.Collection;
public class ContactListFragment extends Fragment implements OnAccountChangedListener, public class ContactListFragment extends Fragment implements OnAccountChangedListener,
OnContactChangedListener, OnChatChangedListener, OnItemClickListener, OnContactChangedListener, OnChatChangedListener, OnItemClickListener,
OnContactListChangedListener { OnContactListChangedListener, OnClickListener {
private ContactListAdapter adapter; private ContactListAdapter adapter;
...@@ -80,10 +82,10 @@ public class ContactListFragment extends Fragment implements OnAccountChangedLis ...@@ -80,10 +82,10 @@ public class ContactListFragment extends Fragment implements OnAccountChangedLis
* Animation for disconnected view. * Animation for disconnected view.
*/ */
private Animation animation; private Animation animation;
private AccountActionButtonsAdapter accountActionButtonsAdapter;
@Override @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.contact_list_fragment, container, false); View view = inflater.inflate(R.layout.contact_list_fragment, container, false);
listView = (ListView) view.findViewById(android.R.id.list); listView = (ListView) view.findViewById(android.R.id.list);
listView.setOnItemClickListener(this); listView.setOnItemClickListener(this);
...@@ -97,6 +99,11 @@ public class ContactListFragment extends Fragment implements OnAccountChangedLis ...@@ -97,6 +99,11 @@ public class ContactListFragment extends Fragment implements OnAccountChangedLis
textView = (TextView) infoView.findViewById(R.id.text); textView = (TextView) infoView.findViewById(R.id.text);
buttonView = (Button) infoView.findViewById(R.id.button); buttonView = (Button) infoView.findViewById(R.id.button);
animation = AnimationUtils.loadAnimation(getActivity(), R.anim.connection); animation = AnimationUtils.loadAnimation(getActivity(), R.anim.connection);
accountActionButtonsAdapter = new AccountActionButtonsAdapter(getActivity(),
this, (LinearLayout) view.findViewById(R.id.account_action_buttons));
accountActionButtonsAdapter.onChange();
return view; return view;
} }
...@@ -359,6 +366,32 @@ public class ContactListFragment extends Fragment implements OnAccountChangedLis ...@@ -359,6 +366,32 @@ public class ContactListFragment extends Fragment implements OnAccountChangedLis
event.recycle(); event.recycle();
} }
@Override
public void onClick(View view) {
String account = accountActionButtonsAdapter.getItemForView(view);
if (account == null) { // Check for tap on account in the title
return;
}
if (!SettingsManager.contactsShowAccounts()) {
if (AccountManager.getInstance().getAccounts().size() < 2) {
scrollUp();
} else {
setSelectedAccount(account);
rebuild();
}
} else {
scrollTo(account);
}
}
public void onAccountsChanged() {
accountActionButtonsAdapter.onChange();
}
public void rebuild() {
accountActionButtonsAdapter.rebuild();
}
public interface OnContactClickListener { public interface OnContactClickListener {
void onContactClick(AbstractContact contact); void onContactClick(AbstractContact contact);
} }
......
/**
* Copyright (c) 2013, Redsolution LTD. All rights reserved.
*
* This file is part of Xabber project; you can redistribute it and/or
* modify it under the terms of the GNU General Public License, Version 3.
*
* Xabber is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License,
* along with this program. If not, see http://www.gnu.org/licenses/.
*/
package com.xabber.android.ui.adapter; package com.xabber.android.ui.adapter;
import android.app.Activity; import android.app.Activity;
import android.graphics.drawable.ColorDrawable; import android.content.res.Resources;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageView;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import com.xabber.android.data.account.AccountManager; import com.xabber.android.data.account.AccountManager;
import com.xabber.android.data.account.StatusMode;
import com.xabber.android.data.extension.avatar.AvatarManager; import com.xabber.android.data.extension.avatar.AvatarManager;
import com.xabber.androiddev.R; import com.xabber.androiddev.R;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
/** import de.hdodenhof.circleimageview.CircleImageView;
* Adapter for the list of accounts in the title of contact list.
*
* @author alexander.ivanov public class AccountActionButtonsAdapter implements UpdatableAdapter {
*/
public class AccountToggleAdapter implements UpdatableAdapter {
private final Activity activity; private final Activity activity;
/** /**
* Listener for click on elements. * Listener for click on elements.
*/ */
private final OnClickListener onClickListener; private final View.OnClickListener onClickListener;
/** /**
* Layout to be populated. * Layout to be populated.
...@@ -55,13 +36,17 @@ public class AccountToggleAdapter implements UpdatableAdapter { ...@@ -55,13 +36,17 @@ public class AccountToggleAdapter implements UpdatableAdapter {
private final ArrayList<String> accounts; private final ArrayList<String> accounts;
private int[] accountActionBarColors; private int[] accountActionBarColors;
public AccountToggleAdapter(Activity activity, public AccountActionButtonsAdapter(Activity activity,
OnClickListener onClickListener, LinearLayout linearLayout) { View.OnClickListener onClickListener, LinearLayout linearLayout) {
super(); super();
this.activity = activity; this.activity = activity;
this.onClickListener = onClickListener; this.onClickListener = onClickListener;
this.linearLayout = linearLayout; this.linearLayout = linearLayout;
accounts = new ArrayList<>(); accounts = new ArrayList<>();
Resources resources = activity.getResources();
accountActionBarColors = resources.getIntArray(R.array.account_action_bar);
} }
/** /**
...@@ -75,18 +60,15 @@ public class AccountToggleAdapter implements UpdatableAdapter { ...@@ -75,18 +60,15 @@ public class AccountToggleAdapter implements UpdatableAdapter {
Collections.sort(accounts); Collections.sort(accounts);
final int size = accounts.size(); final int size = accounts.size();
accountActionBarColors = activity.getResources().getIntArray(R.array.account_action_bar);
final LayoutInflater inflater = (LayoutInflater) activity final LayoutInflater inflater = (LayoutInflater) activity
.getSystemService(Activity.LAYOUT_INFLATER_SERVICE); .getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
while (linearLayout.getChildCount() < size) { while (linearLayout.getChildCount() < size) {
final View view = inflater.inflate(R.layout.account_toggler_item, linearLayout, false); View view = inflater.inflate(R.layout.account_action_button, linearLayout, false);
view.setOnClickListener(onClickListener);
linearLayout.addView(view); linearLayout.addView(view);
final AccountViewHolder accountViewHolder = new AccountViewHolder(view);
view.setTag(accountViewHolder);
activity.registerForContextMenu(accountViewHolder.statusMode);
accountViewHolder.statusMode.setOnClickListener(onClickListener);
} }
while (linearLayout.getChildCount() > size) { while (linearLayout.getChildCount() > size) {
linearLayout.removeViewAt(size); linearLayout.removeViewAt(size);
} }
...@@ -95,21 +77,13 @@ public class AccountToggleAdapter implements UpdatableAdapter { ...@@ -95,21 +77,13 @@ public class AccountToggleAdapter implements UpdatableAdapter {
@Override @Override
public void onChange() { public void onChange() {
String selected = AccountManager.getInstance().getSelectedAccount();
for (int index = 0; index < accounts.size(); index++) { for (int index = 0; index < accounts.size(); index++) {
final View view = linearLayout.getChildAt(index); final CircleImageView floatingActionButton = (CircleImageView) linearLayout.getChildAt(index).findViewById(R.id.account_avatar);
final AccountViewHolder accountViewHolder = (AccountViewHolder) view.getTag();
final String account = accounts.get(index); final String account = accounts.get(index);
StatusMode statusMode = AccountManager.getInstance().getAccount(account).getDisplayStatusMode();
int colorLevel = AccountManager.getInstance().getColorLevel(account); int colorLevel = AccountManager.getInstance().getColorLevel(account);
view.setBackgroundDrawable(new ColorDrawable(accountActionBarColors[colorLevel]));
if (selected == null || account.equals(selected)) { floatingActionButton.setBorderColor(accountActionBarColors[colorLevel]);
accountViewHolder.disabled.setVisibility(View.GONE); floatingActionButton.setImageDrawable(AvatarManager.getInstance().getAccountAvatar(account));
} else {
accountViewHolder.disabled.setVisibility(View.VISIBLE);
}
accountViewHolder.statusMode.setImageLevel(statusMode.ordinal());
accountViewHolder.avatar.setImageDrawable(AvatarManager.getInstance().getAccountAvatar(account));
} }
} }
...@@ -121,17 +95,7 @@ public class AccountToggleAdapter implements UpdatableAdapter { ...@@ -121,17 +95,7 @@ public class AccountToggleAdapter implements UpdatableAdapter {
return accounts.get(position); return accounts.get(position);
} }
/**
* Get the data item associated with the specified view.
*
* @param view direct child of linear layout or status_mode view in direct
* child.
* @return The data for the specified view.
*/
public String getItemForView(View view) { public String getItemForView(View view) {
if (view.getId() == R.id.status_icon) {
view = (View) view.getParent();
}
for (int index = 0; index < linearLayout.getChildCount(); index++) { for (int index = 0; index < linearLayout.getChildCount(); index++) {
if (view == linearLayout.getChildAt(index)) { if (view == linearLayout.getChildAt(index)) {
return accounts.get(index); return accounts.get(index);
...@@ -139,17 +103,4 @@ public class AccountToggleAdapter implements UpdatableAdapter { ...@@ -139,17 +103,4 @@ public class AccountToggleAdapter implements UpdatableAdapter {
} }
return null; return null;
} }
private static class AccountViewHolder {
final ImageView statusMode;
final ImageView avatar;
final ImageView disabled;
public AccountViewHolder(View view) {
statusMode = (ImageView) view.findViewById(R.id.status_icon);
avatar = (ImageView) view.findViewById(R.id.avatar);
disabled = (ImageView) view.findViewById(R.id.disabled);
}
}
} }
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (c) 2013, Redsolution LTD. All rights reserved.
This file is part of Xabber project; you can redistribute it and/or
modify it under the terms of the GNU General Public License, Version 3.
Xabber is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License,
along with this program. If not, see http://www.gnu.org/licenses/.
-->
<level-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/ic_status_chat_account" android:minLevel="0" android:maxLevel="0" />
<item android:drawable="@drawable/ic_status_available_account" android:minLevel="1" android:maxLevel="1" />
<item android:drawable="@drawable/ic_status_away_account" android:minLevel="2" android:maxLevel="2" />
<item android:drawable="@drawable/ic_status_xa_account" android:minLevel="3" android:maxLevel="3" />
<item android:drawable="@drawable/ic_status_dnd_account" android:minLevel="4" android:maxLevel="4" />
<item android:drawable="@drawable/ic_status_invisible_account" android:minLevel="5" android:maxLevel="5" />
<item android:drawable="@drawable/ic_status_unavailable_account" android:minLevel="6" android:maxLevel="6" />
<item android:drawable="@drawable/ic_status_connection_account" android:minLevel="7" android:maxLevel="7" />
</level-list>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingBottom="8dp"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:paddingTop="8dp"
>
<de.hdodenhof.circleimageview.CircleImageView xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/account_avatar"
android:layout_width="48dp"
android:layout_height="48dp"
android:src="@drawable/ic_avatar_1"
app:border_width="3dp"
app:border_color="@color/green_500"
/>
</FrameLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (c) 2013, Redsolution LTD. All rights reserved.
This file is part of Xabber project; you can redistribute it and/or
modify it under the terms of the GNU General Public License, Version 3.
Xabber is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License,
along with this program. If not, see http://www.gnu.org/licenses/.
-->
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@color/material_deep_teal_500"
>
<ImageView
android:id="@+id/avatar"
android:layout_width="32dip"
android:layout_height="32dip"
android:layout_marginTop="4dip"
android:layout_marginLeft="4dip"
android:src="@drawable/ic_avatar_1"
/>
<ImageView
android:id="@+id/status_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_status_account"
android:clickable="true"
/>
<ImageView
android:id="@+id/disabled"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@color/account_disabled"
/>
</RelativeLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/title"
android:layout_width="match_parent"
android:layout_height="?android:attr/actionBarSize"
android:layout_gravity="fill_horizontal"
android:gravity="center_vertical">
<HorizontalScrollView
android:id="@+id/account_bar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
>
<LinearLayout
android:id="@+id/account_list"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal" >
</LinearLayout>
</HorizontalScrollView>
</RelativeLayout>
\ No newline at end of file
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" 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">
...@@ -70,4 +70,17 @@ ...@@ -70,4 +70,17 @@
</RelativeLayout> </RelativeLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:orientation="vertical"
android:layout_marginRight="16dp"
android:layout_marginBottom="8dp"
android:id="@+id/account_action_buttons"
>
</LinearLayout>
</RelativeLayout> </RelativeLayout>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment