mirror of
https://github.com/sudoxnym/habitica-android.git
synced 2026-07-14 02:01:56 +00:00
Begin implementing party invitations
This commit is contained in:
parent
8d4f51e0a3
commit
25ab28a5c2
10 changed files with 287 additions and 11 deletions
|
|
@ -102,6 +102,13 @@
|
|||
android:name="android.support.PARENT_ACTIVITY"
|
||||
android:value=".ui.activities.MainActivity" />
|
||||
</activity>
|
||||
<activity
|
||||
android:name=".ui.activities.PartyInviteActivity"
|
||||
android:theme="@style/AppThemeWithActionBarBlackText"
|
||||
android:screenOrientation="portrait"
|
||||
tools:ignore="UnusedAttribute"
|
||||
android:label="@string/invite_users">
|
||||
</activity>
|
||||
<activity android:name="com.facebook.FacebookActivity"
|
||||
android:configChanges=
|
||||
"keyboard|keyboardHidden|screenLayout|screenSize|orientation"
|
||||
|
|
|
|||
33
Habitica/res/layout/activity_party_invite.xml
Normal file
33
Habitica/res/layout/activity_party_invite.xml
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical">
|
||||
|
||||
<android.support.design.widget.TabLayout
|
||||
android:id="@+id/tab_layout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="?attr/actionBarSize"
|
||||
android:layout_gravity="bottom"
|
||||
android:background="?attr/colorPrimary"
|
||||
android:elevation="0dp"
|
||||
android:fillViewport="false"
|
||||
|
||||
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
|
||||
app:layout_anchor="@+id/collapsing_toolbar"
|
||||
app:layout_anchorGravity="bottom"
|
||||
|
||||
app:layout_collapseMode="pin"
|
||||
app:tabGravity="fill"
|
||||
app:tabIndicatorColor="@android:color/white"
|
||||
app:tabMode="fixed" />
|
||||
|
||||
<android.support.v4.view.ViewPager
|
||||
android:id="@+id/view_pager"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0px"
|
||||
android:layout_weight="1"
|
||||
android:background="@android:color/white" />
|
||||
|
||||
</LinearLayout>
|
||||
31
Habitica/res/layout/fragment_party_invite.xml
Normal file
31
Habitica/res/layout/fragment_party_invite.xml
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:orientation="vertical" android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical">
|
||||
<TextView
|
||||
android:id="@+id/inviteDescription"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_margin="@dimen/row_padding"
|
||||
style="@style/CardTitle"/>
|
||||
<LinearLayout
|
||||
android:id="@+id/invitationWrapper"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical"
|
||||
android:clickable="false"
|
||||
android:layout_marginLeft="@dimen/row_padding"
|
||||
android:layout_marginRight="@dimen/row_padding" />
|
||||
<Button
|
||||
android:id="@+id/addInviteButton"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="right"
|
||||
android:text="@string/add_invites"
|
||||
android:layout_margin="@dimen/row_padding" />
|
||||
</LinearLayout>
|
||||
</ScrollView>
|
||||
8
Habitica/res/menu/menu_party.xml
Normal file
8
Habitica/res/menu/menu_party.xml
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools">
|
||||
<item android:id="@+id/menu_invite_item"
|
||||
android:title="@string/invite"
|
||||
app:showAsAction="never" />
|
||||
</menu>
|
||||
7
Habitica/res/menu/menu_party_invite.xml
Normal file
7
Habitica/res/menu/menu_party_invite.xml
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
tools:context=".ui.activities.TaskFormActivity">
|
||||
<item android:id="@+id/action_send_invites" android:title="@string/invite"
|
||||
android:orderInCategory="100" app:showAsAction="always" />
|
||||
</menu>
|
||||
|
|
@ -329,5 +329,15 @@ To start, which parts of your life do you want to improve?</string>
|
|||
<string name="change_class_description">Change your class and refund your attribute points for 3 gems. </string>
|
||||
<string name="enable_class">Enable Class System</string>
|
||||
<string name="changing_class_progress">Changing Class</string>
|
||||
<string name="by_email">By Email</string>
|
||||
<string name="invite_existing_users">Invite Existing Users</string>
|
||||
<string name="send">Send</string>
|
||||
<string name="invite">Invite</string>
|
||||
<string name="invite_id_description">If you have friends already using Habitica, invite them by User ID here.</string>
|
||||
<string name="invite_email_description">If a friend joins Habitica via your email, they\'ll automatically be invited to your party!</string>
|
||||
<string name="add_invites">Add Invites</string>
|
||||
<string name="user_id">User ID</string>
|
||||
<string name="email">Email</string>
|
||||
<string name="invite_users">Invite to Party</string>
|
||||
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@ import com.github.data5tream.emojilib.EmojiGridView;
|
|||
import com.github.data5tream.emojilib.EmojiPopup;
|
||||
import com.github.data5tream.emojilib.emoji.Emojicon;
|
||||
import com.habitrpg.android.habitica.R;
|
||||
import com.habitrpg.android.habitica.ui.UiUtils;
|
||||
import com.habitrpg.android.habitica.ui.helpers.MarkdownParser;
|
||||
|
||||
import butterknife.Bind;
|
||||
|
|
@ -199,14 +200,14 @@ public class GroupFormActivity extends BaseActivity {
|
|||
@Override
|
||||
public boolean onSupportNavigateUp() {
|
||||
finish();
|
||||
dismissKeyboard();
|
||||
UiUtils.dismissKeyboard(this);
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBackPressed() {
|
||||
finish();
|
||||
dismissKeyboard();
|
||||
UiUtils.dismissKeyboard(this);
|
||||
}
|
||||
|
||||
private void finishActivitySuccessfuly() {
|
||||
|
|
@ -218,14 +219,6 @@ public class GroupFormActivity extends BaseActivity {
|
|||
resultIntent.putExtras(bundle);
|
||||
setResult(Activity.RESULT_OK, resultIntent);
|
||||
finish();
|
||||
dismissKeyboard();
|
||||
}
|
||||
|
||||
private void dismissKeyboard() {
|
||||
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
|
||||
View currentFocus = getCurrentFocus();
|
||||
if (currentFocus != null) {
|
||||
imm.hideSoftInputFromWindow(currentFocus.getWindowToken(), 0);
|
||||
}
|
||||
UiUtils.dismissKeyboard(this);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,101 @@
|
|||
package com.habitrpg.android.habitica.ui.activities;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.support.design.widget.TabLayout;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.support.v4.app.FragmentPagerAdapter;
|
||||
import android.support.v4.view.ViewPager;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
|
||||
import com.habitrpg.android.habitica.R;
|
||||
import com.habitrpg.android.habitica.ui.fragments.BaseFragment;
|
||||
import com.habitrpg.android.habitica.ui.fragments.inventory.StableFragment;
|
||||
import com.habitrpg.android.habitica.ui.fragments.inventory.StableRecyclerFragment;
|
||||
import com.habitrpg.android.habitica.ui.fragments.social.party.PartyInviteFragment;
|
||||
import com.raizlabs.android.dbflow.structure.BaseModel;
|
||||
|
||||
import butterknife.Bind;
|
||||
import butterknife.ButterKnife;
|
||||
|
||||
public class PartyInviteActivity extends BaseActivity {
|
||||
|
||||
@Bind(R.id.tab_layout)
|
||||
TabLayout tabLayout;
|
||||
|
||||
@Bind(R.id.view_pager)
|
||||
ViewPager viewPager;
|
||||
|
||||
@Override
|
||||
protected int getLayoutResId() {
|
||||
return R.layout.activity_party_invite;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
viewPager.setCurrentItem(0);
|
||||
|
||||
setViewPagerAdapter();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public boolean onCreateOptionsMenu(Menu menu) {
|
||||
// Inflate the menu; this adds items to the action bar if it is present.
|
||||
getMenuInflater().inflate(R.menu.menu_party_invite, menu);
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(MenuItem item) {
|
||||
// Handle action bar item clicks here. The action bar will
|
||||
// automatically handle clicks on the Home/Up button, so long
|
||||
// as you specify a parent activity in AndroidManifest.xml.
|
||||
int id = item.getItemId();
|
||||
|
||||
//noinspection SimplifiableIfStatement
|
||||
if (id == R.id.action_send_invites) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return super.onOptionsItemSelected(item);
|
||||
}
|
||||
|
||||
public void setViewPagerAdapter() {
|
||||
android.support.v4.app.FragmentManager fragmentManager = getSupportFragmentManager();
|
||||
|
||||
viewPager.setAdapter(new FragmentPagerAdapter(fragmentManager) {
|
||||
|
||||
@Override
|
||||
public Fragment getItem(int position) {
|
||||
|
||||
PartyInviteFragment fragment = new PartyInviteFragment();
|
||||
|
||||
fragment.isEmailInvite = position == 0;
|
||||
|
||||
return fragment;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getCount() {
|
||||
return 2;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CharSequence getPageTitle(int position) {
|
||||
switch (position) {
|
||||
case 0:
|
||||
return getString(R.string.by_email);
|
||||
case 1:
|
||||
return getString(R.string.invite_existing_users);
|
||||
}
|
||||
return "";
|
||||
}
|
||||
});
|
||||
|
||||
if (tabLayout != null && viewPager != null) {
|
||||
tabLayout.setupWithViewPager(viewPager);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,17 +1,22 @@
|
|||
package com.habitrpg.android.habitica.ui.fragments.social.party;
|
||||
|
||||
import android.content.DialogInterface;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.support.v4.app.FragmentPagerAdapter;
|
||||
import android.support.v4.view.ViewPager;
|
||||
import android.support.v7.app.AlertDialog;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuInflater;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import com.habitrpg.android.habitica.ContentCache;
|
||||
import com.habitrpg.android.habitica.R;
|
||||
import com.habitrpg.android.habitica.ui.activities.PartyInviteActivity;
|
||||
import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment;
|
||||
import com.habitrpg.android.habitica.ui.fragments.social.ChatListFragment;
|
||||
import com.habitrpg.android.habitica.ui.fragments.social.GroupInformationFragment;
|
||||
|
|
@ -95,6 +100,28 @@ public class PartyFragment extends BaseMainFragment {
|
|||
return v;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
|
||||
inflater.inflate(R.menu.menu_party, menu);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(MenuItem item) {
|
||||
// Handle action bar item clicks here. The action bar will
|
||||
// automatically handle clicks on the Home/Up button, so long
|
||||
// as you specify a parent activity in AndroidManifest.xml.
|
||||
int id = item.getItemId();
|
||||
|
||||
switch (id) {
|
||||
case R.id.menu_invite_item:
|
||||
Intent intent = new Intent(getActivity(), PartyInviteActivity.class);
|
||||
startActivity(intent);
|
||||
return true;
|
||||
}
|
||||
|
||||
return super.onOptionsItemSelected(item);
|
||||
}
|
||||
|
||||
public void setViewPagerAdapter() {
|
||||
android.support.v4.app.FragmentManager fragmentManager = getChildFragmentManager();
|
||||
if (this.user == null) {
|
||||
|
|
|
|||
|
|
@ -0,0 +1,59 @@
|
|||
package com.habitrpg.android.habitica.ui.fragments.social.party;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.text.InputType;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.EditText;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.habitrpg.android.habitica.R;
|
||||
import com.habitrpg.android.habitica.ui.fragments.BaseFragment;
|
||||
|
||||
import butterknife.Bind;
|
||||
import butterknife.ButterKnife;
|
||||
import butterknife.OnClick;
|
||||
|
||||
public class PartyInviteFragment extends BaseFragment {
|
||||
|
||||
public boolean isEmailInvite;
|
||||
|
||||
@Bind(R.id.inviteDescription)
|
||||
TextView inviteDescription;
|
||||
|
||||
@Bind(R.id.invitationWrapper)
|
||||
LinearLayout invitationWrapper;
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
|
||||
super.onCreateView(inflater, container, savedInstanceState);
|
||||
View v = inflater.inflate(R.layout.fragment_party_invite, container, false);
|
||||
ButterKnife.bind(this, v);
|
||||
|
||||
if (isEmailInvite) {
|
||||
inviteDescription.setText(getString(R.string.invite_email_description));
|
||||
} else {
|
||||
inviteDescription.setText(getString(R.string.invite_id_description));
|
||||
}
|
||||
|
||||
addInviteField();
|
||||
|
||||
return v;
|
||||
}
|
||||
|
||||
@OnClick(R.id.addInviteButton)
|
||||
public void addInviteField() {
|
||||
EditText editText = new EditText(getContext());
|
||||
if (isEmailInvite) {
|
||||
editText.setHint(R.string.email);
|
||||
editText.setInputType(InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS);
|
||||
} else {
|
||||
editText.setHint(R.string.user_id);
|
||||
}
|
||||
invitationWrapper.addView(editText);
|
||||
}
|
||||
}
|
||||
Loading…
Reference in a new issue