New login + signup

This commit is contained in:
Gabriel Calero 2018-10-25 19:12:51 -03:00
parent e125107a9f
commit 11d82e0ad0
26 changed files with 1057 additions and 563 deletions

View file

@ -71,6 +71,10 @@
android:screenOrientation="portrait" android:screenOrientation="portrait"
android:theme="@style/Theme.AppCompat.Translucent.NoActionBar" /> android:theme="@style/Theme.AppCompat.Translucent.NoActionBar" />
<activity android:name=".LoginMenuActivity"
android:screenOrientation="portrait"
android:theme="@style/Theme.AppCompat.Translucent.NoActionBar" />
<service <service
android:name=".BreakpadUploaderService" android:name=".BreakpadUploaderService"
android:enabled="true" android:enabled="true"

View file

@ -259,7 +259,7 @@ JNIEXPORT jstring JNICALL Java_io_highfidelity_hifiinterface_fragment_HomeFragme
} }
JNIEXPORT void JNICALL JNIEXPORT void JNICALL
Java_io_highfidelity_hifiinterface_fragment_LoginFragment_nativeCancelLogin(JNIEnv *env, jobject instance) { Java_io_highfidelity_hifiinterface_fragment_LoginFragment_cancelLogin(JNIEnv *env, jobject instance) {
auto accountManager = DependencyManager::get<AccountManager>(); auto accountManager = DependencyManager::get<AccountManager>();
@ -269,17 +269,15 @@ Java_io_highfidelity_hifiinterface_fragment_LoginFragment_nativeCancelLogin(JNIE
} }
JNIEXPORT void JNICALL JNIEXPORT void JNICALL
Java_io_highfidelity_hifiinterface_fragment_SignupFragment_nativeCancelLogin(JNIEnv *env, Java_io_highfidelity_hifiinterface_fragment_SignupFragment_cancelLogin(JNIEnv *env,
jobject instance) { jobject instance) {
Java_io_highfidelity_hifiinterface_fragment_LoginFragment_nativeCancelLogin(env, instance); Java_io_highfidelity_hifiinterface_fragment_LoginFragment_cancelLogin(env, instance);
} }
JNIEXPORT void JNICALL JNIEXPORT void JNICALL
Java_io_highfidelity_hifiinterface_fragment_LoginFragment_nativeLogin(JNIEnv *env, jobject instance, Java_io_highfidelity_hifiinterface_fragment_LoginFragment_login(JNIEnv *env, jobject instance,
jstring username_, jstring password_, jstring username_, jstring password_) {
jobject usernameChangedListener) {
const char *c_username = env->GetStringUTFChars(username_, 0); const char *c_username = env->GetStringUTFChars(username_, 0);
const char *c_password = env->GetStringUTFChars(password_, 0); const char *c_password = env->GetStringUTFChars(password_, 0);
QString username = QString(c_username); QString username = QString(c_username);
@ -290,7 +288,6 @@ Java_io_highfidelity_hifiinterface_fragment_LoginFragment_nativeLogin(JNIEnv *en
auto accountManager = DependencyManager::get<AccountManager>(); auto accountManager = DependencyManager::get<AccountManager>();
__loginCompletedListener = QAndroidJniObject(instance); __loginCompletedListener = QAndroidJniObject(instance);
__usernameChangedListener = QAndroidJniObject(usernameChangedListener);
QObject::connect(accountManager.data(), &AccountManager::loginComplete, [](const QUrl& authURL) { QObject::connect(accountManager.data(), &AccountManager::loginComplete, [](const QUrl& authURL) {
jboolean jSuccess = (jboolean) true; jboolean jSuccess = (jboolean) true;
@ -306,24 +303,16 @@ Java_io_highfidelity_hifiinterface_fragment_LoginFragment_nativeLogin(JNIEnv *en
} }
}); });
QObject::connect(accountManager.data(), &AccountManager::usernameChanged, [](const QString& username) {
QAndroidJniObject string = QAndroidJniObject::fromString(username);
if (__usernameChangedListener.isValid()) {
__usernameChangedListener.callMethod<void>("handleUsernameChanged", "(Ljava/lang/String;)V", string.object<jstring>());
}
});
QMetaObject::invokeMethod(accountManager.data(), "requestAccessToken", QMetaObject::invokeMethod(accountManager.data(), "requestAccessToken",
Q_ARG(const QString&, username), Q_ARG(const QString&, password)); Q_ARG(const QString&, username), Q_ARG(const QString&, password));
} }
JNIEXPORT void JNICALL JNIEXPORT void JNICALL
Java_io_highfidelity_hifiinterface_fragment_SignupFragment_nativeLogin(JNIEnv *env, Java_io_highfidelity_hifiinterface_fragment_SignupFragment_login(JNIEnv *env,
jobject instance, jobject instance,
jstring username_, jstring username_,
jstring password_, jstring password_) {
jobject usernameChangedListener) { Java_io_highfidelity_hifiinterface_fragment_LoginFragment_login(env, instance, username_, password_);
Java_io_highfidelity_hifiinterface_fragment_LoginFragment_nativeLogin(env, instance, username_, password_, usernameChangedListener);
} }
JNIEXPORT void Java_io_highfidelity_hifiinterface_InterfaceActivity_nativeInitAfterAppLoaded(JNIEnv* env, jobject obj) { JNIEXPORT void Java_io_highfidelity_hifiinterface_InterfaceActivity_nativeInitAfterAppLoaded(JNIEnv* env, jobject obj) {
@ -331,7 +320,7 @@ JNIEXPORT void Java_io_highfidelity_hifiinterface_InterfaceActivity_nativeInitAf
} }
JNIEXPORT void JNICALL JNIEXPORT void JNICALL
Java_io_highfidelity_hifiinterface_fragment_SignupFragment_nativeSignup(JNIEnv *env, jobject instance, Java_io_highfidelity_hifiinterface_fragment_SignupFragment_signup(JNIEnv *env, jobject instance,
jstring email_, jstring username_, jstring email_, jstring username_,
jstring password_) { jstring password_) {
@ -359,8 +348,6 @@ Java_io_highfidelity_hifiinterface_fragment_SignupFragment_nativeSignup(JNIEnv *
}); });
QObject::connect(&AndroidHelper::instance(), &AndroidHelper::handleSignupFailed, [](QString errorString) { QObject::connect(&AndroidHelper::instance(), &AndroidHelper::handleSignupFailed, [](QString errorString) {
jboolean jSuccess = (jboolean) false;
jstring jError = QAndroidJniObject::fromString(errorString).object<jstring>();
if (__signupCompletedListener.isValid()) { if (__signupCompletedListener.isValid()) {
QAndroidJniObject string = QAndroidJniObject::fromString(errorString); QAndroidJniObject string = QAndroidJniObject::fromString(errorString);
__signupCompletedListener.callMethod<void>("handleSignupFailed", "(Ljava/lang/String;)V", string.object<jstring>()); __signupCompletedListener.callMethod<void>("handleSignupFailed", "(Ljava/lang/String;)V", string.object<jstring>());
@ -371,19 +358,13 @@ Java_io_highfidelity_hifiinterface_fragment_SignupFragment_nativeSignup(JNIEnv *
} }
JNIEXPORT void JNICALL JNIEXPORT void JNICALL
Java_io_highfidelity_hifiinterface_fragment_SignupFragment_nativeCancelSignup(JNIEnv *env, jobject instance) { Java_io_highfidelity_hifiinterface_fragment_SignupFragment_cancelSignup(JNIEnv *env, jobject instance) {
QObject::disconnect(&AndroidHelper::instance(), &AndroidHelper::handleSignupCompleted, nullptr, nullptr); QObject::disconnect(&AndroidHelper::instance(), &AndroidHelper::handleSignupCompleted, nullptr, nullptr);
QObject::disconnect(&AndroidHelper::instance(), &AndroidHelper::handleSignupFailed, nullptr, nullptr); QObject::disconnect(&AndroidHelper::instance(), &AndroidHelper::handleSignupFailed, nullptr, nullptr);
__signupCompletedListener = nullptr; __signupCompletedListener = nullptr;
} }
JNIEXPORT jboolean JNICALL
Java_io_highfidelity_hifiinterface_fragment_FriendsFragment_nativeIsLoggedIn(JNIEnv *env, jobject instance) {
auto accountManager = DependencyManager::get<AccountManager>();
return accountManager->isLoggedIn();
}
JNIEXPORT jstring JNICALL JNIEXPORT jstring JNICALL
Java_io_highfidelity_hifiinterface_fragment_FriendsFragment_nativeGetAccessToken(JNIEnv *env, jobject instance) { Java_io_highfidelity_hifiinterface_fragment_FriendsFragment_nativeGetAccessToken(JNIEnv *env, jobject instance) {
auto accountManager = DependencyManager::get<AccountManager>(); auto accountManager = DependencyManager::get<AccountManager>();
@ -407,22 +388,43 @@ Java_io_highfidelity_hifiinterface_SplashActivity_registerLoadCompleteListener(J
} }
JNIEXPORT jboolean JNICALL JNIEXPORT jboolean JNICALL
Java_io_highfidelity_hifiinterface_MainActivity_nativeIsLoggedIn(JNIEnv *env, jobject instance) { Java_io_highfidelity_hifiinterface_HifiUtils_isUserLoggedIn(JNIEnv *env, jobject instance) {
return DependencyManager::get<AccountManager>()->isLoggedIn(); return DependencyManager::get<AccountManager>()->isLoggedIn();
} }
JNIEXPORT void JNICALL JNIEXPORT void JNICALL
Java_io_highfidelity_hifiinterface_MainActivity_nativeLogout(JNIEnv *env, jobject instance) { Java_io_highfidelity_hifiinterface_MainActivity_logout(JNIEnv *env, jobject instance) {
DependencyManager::get<AccountManager>()->logout(); DependencyManager::get<AccountManager>()->logout();
} }
JNIEXPORT jstring JNICALL JNIEXPORT jstring JNICALL
Java_io_highfidelity_hifiinterface_MainActivity_nativeGetDisplayName(JNIEnv *env, Java_io_highfidelity_hifiinterface_MainActivity_getUsername(JNIEnv *env,
jobject instance) { jobject instance) {
QString username = DependencyManager::get<AccountManager>()->getAccountInfo().getUsername(); QString username = DependencyManager::get<AccountManager>()->getAccountInfo().getUsername();
return env->NewStringUTF(username.toLatin1().data()); return env->NewStringUTF(username.toLatin1().data());
} }
JNIEXPORT void JNICALL
Java_io_highfidelity_hifiinterface_MainActivity_setUsernameChangedListener(JNIEnv *env,
jobject instance,
jobject usernameChangedListener) {
__usernameChangedListener = QAndroidJniObject(usernameChangedListener);
if (!__usernameChangedListener.isValid()) {
return;
}
auto accountManager = DependencyManager::get<AccountManager>();
QObject::connect(accountManager.data(), &AccountManager::usernameChanged, [](const QString& username) {
QAndroidJniObject string = QAndroidJniObject::fromString(username);
if (__usernameChangedListener.isValid()) {
__usernameChangedListener.callMethod<void>("handleUsernameChanged", "(Ljava/lang/String;)V", string.object<jstring>());
}
});
}
JNIEXPORT void JNICALL JNIEXPORT void JNICALL
Java_io_highfidelity_hifiinterface_InterfaceActivity_nativeBeforeEnterBackground(JNIEnv *env, jobject obj) { Java_io_highfidelity_hifiinterface_InterfaceActivity_nativeBeforeEnterBackground(JNIEnv *env, jobject obj) {
AndroidHelper::instance().notifyBeforeEnterBackground(); AndroidHelper::instance().notifyBeforeEnterBackground();

View file

@ -64,4 +64,7 @@ public class HifiUtils {
public native String protocolVersionSignature(); public native String protocolVersionSignature();
public native boolean isUserLoggedIn();
} }

View file

@ -313,11 +313,10 @@ public class InterfaceActivity extends QtActivity implements WebViewFragment.OnW
break; break;
case "Login": case "Login":
nativeBeforeEnterBackground(); nativeBeforeEnterBackground();
Intent loginIntent = new Intent(this, MainActivity.class); Intent loginIntent = new Intent(this, LoginMenuActivity.class);
loginIntent.putExtra(MainActivity.EXTRA_FRAGMENT, activityName); loginIntent.putExtra(LoginMenuActivity.EXTRA_BACK_TO_SCENE, backToScene);
loginIntent.putExtra(MainActivity.EXTRA_BACK_TO_SCENE, backToScene);
if (args != null && args.containsKey(DOMAIN_URL)) { if (args != null && args.containsKey(DOMAIN_URL)) {
loginIntent.putExtra(DOMAIN_URL, (String) args.get(DOMAIN_URL)); loginIntent.putExtra(LoginMenuActivity.EXTRA_DOMAIN_URL, (String) args.get(DOMAIN_URL));
} }
startActivity(loginIntent); startActivity(loginIntent);
break; break;

View file

@ -0,0 +1,177 @@
package io.highfidelity.hifiinterface;
import android.app.Fragment;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import io.highfidelity.hifiinterface.fragment.LoginFragment;
import io.highfidelity.hifiinterface.fragment.SignupFragment;
import io.highfidelity.hifiinterface.fragment.StartMenuFragment;
public class LoginMenuActivity extends AppCompatActivity
implements StartMenuFragment.StartMenuInteractionListener,
LoginFragment.OnLoginInteractionListener,
SignupFragment.OnSignupInteractionListener {
public static final String EXTRA_FINISH_ON_BACK = "finishOnBack";
public static final String EXTRA_BACK_TO_SCENE = "backToScene";
public static final String EXTRA_DOMAIN_URL = "url";
private boolean finishOnBack;
private boolean backToScene;
private String domainUrlToBack;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_encourage_login);
finishOnBack = getIntent().getBooleanExtra(EXTRA_FINISH_ON_BACK, false);
backToScene = getIntent().getBooleanExtra(EXTRA_BACK_TO_SCENE, false);
domainUrlToBack = getIntent().getStringExtra(EXTRA_DOMAIN_URL);
if (savedInstanceState != null) {
finishOnBack = savedInstanceState.getBoolean(EXTRA_FINISH_ON_BACK, false);
backToScene = savedInstanceState.getBoolean(EXTRA_BACK_TO_SCENE, false);
domainUrlToBack = savedInstanceState.getString(EXTRA_DOMAIN_URL);
}
loadMenuFragment();
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putBoolean(EXTRA_FINISH_ON_BACK, finishOnBack);
outState.putBoolean(EXTRA_BACK_TO_SCENE, backToScene);
outState.putString(EXTRA_DOMAIN_URL, domainUrlToBack);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
finishOnBack = savedInstanceState.getBoolean(EXTRA_FINISH_ON_BACK, false);
backToScene = savedInstanceState.getBoolean(EXTRA_BACK_TO_SCENE, false);
domainUrlToBack = savedInstanceState.getString(EXTRA_DOMAIN_URL);
}
private void loadMenuFragment() {
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
Fragment fragment = StartMenuFragment.newInstance();
fragmentTransaction.replace(R.id.content_frame, fragment);
fragmentTransaction.addToBackStack(fragment.toString());
fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
fragmentTransaction.commit();
hideStatusBar();
}
@Override
protected void onResume() {
super.onResume();
hideStatusBar();
}
private void hideStatusBar() {
View decorView = getWindow().getDecorView();
// Hide the status bar.
int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN;
decorView.setSystemUiVisibility(uiOptions);
}
@Override
public void onSignupButtonClicked() {
loadSignupFragment();
}
@Override
public void onLoginButtonClicked() {
loadLoginFragment();
}
@Override
public void onSkipLoginClicked() {
loadMainActivity();
}
private void loadSignupFragment() {
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
Fragment fragment = SignupFragment.newInstance();
fragmentTransaction.replace(R.id.content_frame, fragment);
fragmentTransaction.addToBackStack(fragment.toString());
fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
fragmentTransaction.commit();
hideStatusBar();
}
private void loadLoginFragment() {
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
Fragment fragment = LoginFragment.newInstance();
fragmentTransaction.replace(R.id.content_frame, fragment);
fragmentTransaction.addToBackStack(fragment.toString());
fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
fragmentTransaction.commit();
hideStatusBar();
}
@Override
public void onLoginCompleted() {
loadMainActivity();
}
@Override
public void onCancelLogin() {
getFragmentManager().popBackStack();
}
@Override
public void onCancelSignup() {
getFragmentManager().popBackStack();
}
private void loadMainActivity() {
finish();
if (backToScene) {
backToScene = false;
goToDomain(domainUrlToBack != null? domainUrlToBack : "");
} else {
startActivity(new Intent(this, MainActivity.class));
}
}
private void goToDomain(String domainUrl) {
Intent intent = new Intent(this, InterfaceActivity.class);
intent.putExtra(InterfaceActivity.DOMAIN_URL, domainUrl);
finish();
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent);
}
@Override
public void onSignupCompleted() {
loadMainActivity();
}
@Override
public void onBackPressed() {
FragmentManager fm = getFragmentManager();
int index = fm.getBackStackEntryCount() - 1;
if (index > 0) {
super.onBackPressed();
} else if (finishOnBack){
finishAffinity();
} else {
finish();
}
}
}

View file

@ -1,5 +1,6 @@
package io.highfidelity.hifiinterface; package io.highfidelity.hifiinterface;
import android.app.Activity;
import android.app.Fragment; import android.app.Fragment;
import android.app.FragmentManager; import android.app.FragmentManager;
import android.app.FragmentTransaction; import android.app.FragmentTransaction;
@ -29,23 +30,16 @@ import android.widget.TextView;
import com.squareup.picasso.Callback; import com.squareup.picasso.Callback;
import com.squareup.picasso.Picasso; import com.squareup.picasso.Picasso;
import java.util.HashMap;
import java.util.Map;
import io.highfidelity.hifiinterface.fragment.FriendsFragment; import io.highfidelity.hifiinterface.fragment.FriendsFragment;
import io.highfidelity.hifiinterface.fragment.HomeFragment; import io.highfidelity.hifiinterface.fragment.HomeFragment;
import io.highfidelity.hifiinterface.fragment.LoginFragment;
import io.highfidelity.hifiinterface.fragment.PolicyFragment; import io.highfidelity.hifiinterface.fragment.PolicyFragment;
import io.highfidelity.hifiinterface.fragment.SettingsFragment; import io.highfidelity.hifiinterface.fragment.SettingsFragment;
import io.highfidelity.hifiinterface.fragment.SignedInFragment; import io.highfidelity.hifiinterface.fragment.SignupFragment;
import io.highfidelity.hifiinterface.fragment.SignupFragment;import io.highfidelity.hifiinterface.task.DownloadProfileImageTask; import io.highfidelity.hifiinterface.task.DownloadProfileImageTask;
public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener, public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener,
LoginFragment.OnLoginInteractionListener,
HomeFragment.OnHomeInteractionListener, HomeFragment.OnHomeInteractionListener,
FriendsFragment.OnHomeInteractionListener, FriendsFragment.OnHomeInteractionListener {
SignupFragment.OnSignupInteractionListener,
SignedInFragment.OnSignedInInteractionListener {
private static final int PROFILE_PICTURE_PLACEHOLDER = R.drawable.default_profile_avatar; private static final int PROFILE_PICTURE_PLACEHOLDER = R.drawable.default_profile_avatar;
public static final String DEFAULT_FRAGMENT = "Home"; public static final String DEFAULT_FRAGMENT = "Home";
@ -55,9 +49,9 @@ public class MainActivity extends AppCompatActivity implements NavigationView.On
private String TAG = "HighFidelity"; private String TAG = "HighFidelity";
public native boolean nativeIsLoggedIn(); public native void logout();
public native void nativeLogout(); public native void setUsernameChangedListener(Activity usernameChangedListener);
public native String nativeGetDisplayName(); public native String getUsername();
private DrawerLayout mDrawerLayout; private DrawerLayout mDrawerLayout;
private NavigationView mNavigationView; private NavigationView mNavigationView;
@ -130,9 +124,6 @@ public class MainActivity extends AppCompatActivity implements NavigationView.On
private void loadFragment(String fragment) { private void loadFragment(String fragment) {
switch (fragment) { switch (fragment) {
case "Login":
loadLoginFragment();
break;
case "Home": case "Home":
loadHomeFragment(true); loadHomeFragment(true);
break; break;
@ -153,14 +144,8 @@ public class MainActivity extends AppCompatActivity implements NavigationView.On
loadFragment(fragment, getString(R.string.home), getString(R.string.tagFragmentHome), addToBackStack, true); loadFragment(fragment, getString(R.string.home), getString(R.string.tagFragmentHome), addToBackStack, true);
} }
private void loadLoginFragment() { private void startLoginMenuActivity() {
Fragment fragment = LoginFragment.newInstance(); startActivity(new Intent(this, LoginMenuActivity.class));
loadFragment(fragment, getString(R.string.login), getString(R.string.tagFragmentLogin), true, true);
}
private void loadSignedInFragment() {
Fragment fragment = SignedInFragment.newInstance();
loadFragment(fragment, getString(R.string.welcome), getString(R.string.tagFragmentSignedIn), true, true);
} }
private void loadSignupFragment() { private void loadSignupFragment() {
@ -223,7 +208,7 @@ public class MainActivity extends AppCompatActivity implements NavigationView.On
private void updateLoginMenu() { private void updateLoginMenu() {
if (nativeIsLoggedIn()) { if (HifiUtils.getInstance().isUserLoggedIn()) {
mLoginPanel.setVisibility(View.GONE); mLoginPanel.setVisibility(View.GONE);
mProfilePanel.setVisibility(View.VISIBLE); mProfilePanel.setVisibility(View.VISIBLE);
mLogoutOption.setVisibility(View.VISIBLE); mLogoutOption.setVisibility(View.VISIBLE);
@ -239,7 +224,7 @@ public class MainActivity extends AppCompatActivity implements NavigationView.On
} }
private void updateProfileHeader() { private void updateProfileHeader() {
updateProfileHeader(nativeGetDisplayName()); updateProfileHeader(getUsername());
} }
private void updateProfileHeader(String username) { private void updateProfileHeader(String username) {
if (!username.isEmpty()) { if (!username.isEmpty()) {
@ -289,15 +274,22 @@ public class MainActivity extends AppCompatActivity implements NavigationView.On
@Override @Override
protected void onStart() { protected void onStart() {
super.onStart(); super.onStart();
setUsernameChangedListener(this);
updateLoginMenu(); updateLoginMenu();
} }
@Override
protected void onStop() {
super.onStop();
setUsernameChangedListener(null);
}
public void onLoginClicked(View view) { public void onLoginClicked(View view) {
loadLoginFragment(); startLoginMenuActivity();
} }
public void onLogoutClicked(View view) { public void onLogoutClicked(View view) {
nativeLogout(); logout();
updateLoginMenu(); updateLoginMenu();
exitLoggedInFragment(); exitLoggedInFragment();
@ -338,42 +330,6 @@ public class MainActivity extends AppCompatActivity implements NavigationView.On
startActivity(intent); startActivity(intent);
} }
@Override
public void onLoginCompleted() {
loadHomeFragment(false);
updateLoginMenu();
if (backToScene) {
backToScene = false;
goToLastLocation();
}
}
@Override
public void onGettingStarted() {
loadHomeFragment(false);
if (backToScene) {
backToScene = false;
goToLastLocation();
}
}
@Override
public void onLoginRequested() {
// go back from signup to login
onBackPressed();
}
@Override
public void onSignupRequested() {
loadSignupFragment();
}
@Override
public void onSignupCompleted() {
loadSignedInFragment();
updateLoginMenu();
}
public void handleUsernameChanged(String username) { public void handleUsernameChanged(String username) {
runOnUiThread(() -> updateProfileHeader(username)); runOnUiThread(() -> updateProfileHeader(username));
} }
@ -418,7 +374,6 @@ public class MainActivity extends AppCompatActivity implements NavigationView.On
public void onBackPressed() { public void onBackPressed() {
// if a fragment needs to internally manage back presses.. // if a fragment needs to internally manage back presses..
FragmentManager fm = getFragmentManager(); FragmentManager fm = getFragmentManager();
Log.d("[BACK]", "getBackStackEntryCount " + fm.getBackStackEntryCount());
Fragment friendsFragment = fm.findFragmentByTag(getString(R.string.tagFragmentPeople)); Fragment friendsFragment = fm.findFragmentByTag(getString(R.string.tagFragmentPeople));
if (friendsFragment != null && friendsFragment instanceof FriendsFragment) { if (friendsFragment != null && friendsFragment instanceof FriendsFragment) {
if (((FriendsFragment) friendsFragment).onBackPressed()) { if (((FriendsFragment) friendsFragment).onBackPressed()) {

View file

@ -3,7 +3,6 @@ package io.highfidelity.hifiinterface;
import android.app.Activity; import android.app.Activity;
import android.content.Intent; import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler;
import android.view.View; import android.view.View;
public class SplashActivity extends Activity { public class SplashActivity extends Activity {
@ -37,7 +36,13 @@ public class SplashActivity extends Activity {
} }
public void onAppLoadedComplete() { public void onAppLoadedComplete() {
if (HifiUtils.getInstance().isUserLoggedIn()) {
startActivity(new Intent(this, MainActivity.class)); startActivity(new Intent(this, MainActivity.class));
} else {
Intent menuIntent = new Intent(this, LoginMenuActivity.class);
menuIntent.putExtra(LoginMenuActivity.EXTRA_FINISH_ON_BACK, true);
startActivity(menuIntent);
}
SplashActivity.this.finish(); SplashActivity.this.finish();
} }
} }

View file

@ -23,8 +23,6 @@ import io.highfidelity.hifiinterface.view.UserListAdapter;
public class FriendsFragment extends Fragment { public class FriendsFragment extends Fragment {
public native boolean nativeIsLoggedIn();
public native String nativeGetAccessToken(); public native String nativeGetAccessToken();
private RecyclerView mUsersView; private RecyclerView mUsersView;

View file

@ -1,13 +1,11 @@
package io.highfidelity.hifiinterface.fragment; package io.highfidelity.hifiinterface.fragment;
import android.app.Activity;
import android.app.Fragment; import android.app.Fragment;
import android.app.ProgressDialog;
import android.content.Context; import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent; import android.content.Intent;
import android.net.Uri; import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import android.view.KeyEvent;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
@ -29,14 +27,13 @@ public class LoginFragment extends Fragment {
private EditText mUsername; private EditText mUsername;
private EditText mPassword; private EditText mPassword;
private TextView mError; private TextView mError;
private TextView mForgotPassword;
private TextView mSignup;
private Button mLoginButton; private Button mLoginButton;
private ViewGroup mLoginForm;
private ViewGroup mLoggingInFrame;
private ViewGroup mLoggedInFrame;
private ProgressDialog mDialog; public native void login(String username, String password, Fragment usernameChangedListener);
public native void cancelLogin();
public native void nativeLogin(String username, String password, Activity usernameChangedListener);
public native void nativeCancelLogin();
private LoginFragment.OnLoginInteractionListener mListener; private LoginFragment.OnLoginInteractionListener mListener;
@ -58,22 +55,21 @@ public class LoginFragment extends Fragment {
mPassword = rootView.findViewById(R.id.password); mPassword = rootView.findViewById(R.id.password);
mError = rootView.findViewById(R.id.error); mError = rootView.findViewById(R.id.error);
mLoginButton = rootView.findViewById(R.id.loginButton); mLoginButton = rootView.findViewById(R.id.loginButton);
mForgotPassword = rootView.findViewById(R.id.forgotPassword); mLoginForm = rootView.findViewById(R.id.loginForm);
mSignup = rootView.findViewById(R.id.signupButton); mLoggingInFrame = rootView.findViewById(R.id.loggingInFrame);
mLoggedInFrame = rootView.findViewById(R.id.loggedInFrame);
mLoginButton.setOnClickListener(view -> login()); rootView.findViewById(R.id.forgotPassword).setOnClickListener(view -> onForgotPasswordClicked());
mForgotPassword.setOnClickListener(view -> forgotPassword()); rootView.findViewById(R.id.cancel).setOnClickListener(view -> onCancelLogin());
mSignup.setOnClickListener(view -> signup());
rootView.findViewById(R.id.getStarted).setOnClickListener(view -> onGetStartedClicked());
mLoginButton.setOnClickListener(view -> onLoginButtonClicked());
rootView.findViewById(R.id.takeMeInWorld).setOnClickListener(view -> skipLogin());
mPassword.setOnEditorActionListener((textView, actionId, keyEvent) -> onPasswordEditorAction(textView, actionId, keyEvent));
mPassword.setOnEditorActionListener(
(textView, actionId, keyEvent) -> {
if (actionId == EditorInfo.IME_ACTION_DONE) {
mLoginButton.performClick();
return true;
}
return false;
});
return rootView; return rootView;
} }
@ -104,13 +100,39 @@ public class LoginFragment extends Fragment {
@Override @Override
public void onStop() { public void onStop() {
super.onStop(); super.onStop();
cancelActivityIndicator(); showLoginForm();
// Leave the Qt app paused // Leave the Qt app paused
QtNative.setApplicationState(ApplicationInactive); QtNative.setApplicationState(ApplicationInactive);
hideKeyboard(); hideKeyboard();
} }
public void login() { private void onCancelLogin() {
if (mListener != null) {
mListener.onCancelLogin();
}
}
private boolean onPasswordEditorAction(TextView textView, int actionId, KeyEvent keyEvent) {
if (actionId == EditorInfo.IME_ACTION_DONE) {
mLoginButton.performClick();
return true;
}
return false;
}
private void skipLogin() {
if (mListener != null) {
mListener.onSkipLoginClicked();
}
}
private void onGetStartedClicked() {
if (mListener != null) {
mListener.onLoginCompleted();
}
}
public void onLoginButtonClicked() {
String username = mUsername.getText().toString().trim(); String username = mUsername.getText().toString().trim();
String password = mPassword.getText().toString(); String password = mPassword.getText().toString();
hideKeyboard(); hideKeyboard();
@ -120,13 +142,7 @@ public class LoginFragment extends Fragment {
mLoginButton.setEnabled(false); mLoginButton.setEnabled(false);
hideError(); hideError();
showActivityIndicator(); showActivityIndicator();
nativeLogin(username, password, getActivity()); login(username, password, this);
}
}
public void signup() {
if (mListener != null) {
mListener.onSignupRequested();
} }
} }
@ -138,33 +154,29 @@ public class LoginFragment extends Fragment {
} }
} }
private void forgotPassword() { private void onForgotPasswordClicked() {
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://highfidelity.com/users/password/new")); Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://highfidelity.com/users/password/new"));
startActivity(intent); startActivity(intent);
} }
private void showActivityIndicator() { private void showActivityIndicator() {
if (mDialog == null) { mLoginForm.setVisibility(View.GONE);
mDialog = new ProgressDialog(getContext()); mLoggedInFrame.setVisibility(View.GONE);
} mLoggingInFrame.setVisibility(View.VISIBLE);
mDialog.setMessage(getString(R.string.logging_in));
mDialog.setCancelable(true);
mDialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
@Override
public void onCancel(DialogInterface dialogInterface) {
nativeCancelLogin();
cancelActivityIndicator();
mLoginButton.setEnabled(true);
}
});
mDialog.show();
} }
private void cancelActivityIndicator() { private void showLoginForm() {
if (mDialog != null) { mLoggingInFrame.setVisibility(View.GONE);
mDialog.cancel(); mLoggedInFrame.setVisibility(View.GONE);
mLoginForm.setVisibility(View.VISIBLE);
} }
private void showLoggedInMessage() {
mLoginForm.setVisibility(View.GONE);
mLoggingInFrame.setVisibility(View.GONE);
mLoggedInFrame.setVisibility(View.VISIBLE);
} }
private void showError(String error) { private void showError(String error) {
mError.setText(error); mError.setText(error);
mError.setVisibility(View.VISIBLE); mError.setVisibility(View.VISIBLE);
@ -178,12 +190,10 @@ public class LoginFragment extends Fragment {
public void handleLoginCompleted(boolean success) { public void handleLoginCompleted(boolean success) {
getActivity().runOnUiThread(() -> { getActivity().runOnUiThread(() -> {
mLoginButton.setEnabled(true); mLoginButton.setEnabled(true);
cancelActivityIndicator();
if (success) { if (success) {
if (mListener != null) { showLoggedInMessage();
mListener.onLoginCompleted();
}
} else { } else {
showLoginForm();
showError(getString(R.string.login_username_or_password_incorrect)); showError(getString(R.string.login_username_or_password_incorrect));
} }
}); });
@ -191,7 +201,8 @@ public class LoginFragment extends Fragment {
public interface OnLoginInteractionListener { public interface OnLoginInteractionListener {
void onLoginCompleted(); void onLoginCompleted();
void onSignupRequested(); void onCancelLogin();
void onSkipLoginClicked();
} }
} }

View file

@ -1,73 +0,0 @@
package io.highfidelity.hifiinterface.fragment;
import android.app.Fragment;
import android.content.Context;
import android.os.Bundle;
import android.text.Html;
import android.text.Spanned;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;
import java.io.IOException;
import java.io.InputStream;
import io.highfidelity.hifiinterface.R;
public class SignedInFragment extends Fragment {
private Button mGetStartedButton;
private OnSignedInInteractionListener mListener;
public SignedInFragment() {
// Required empty public constructor
}
public static SignedInFragment newInstance() {
SignedInFragment fragment = new SignedInFragment();
return fragment;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_signedin, container, false);
mGetStartedButton = rootView.findViewById(R.id.getStarted);
mGetStartedButton.setOnClickListener(view -> {
getStarted();
});
return rootView;
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
if (context instanceof SignedInFragment.OnSignedInInteractionListener) {
mListener = (SignedInFragment.OnSignedInInteractionListener) context;
} else {
throw new RuntimeException(context.toString()
+ " must implement OnSignedInInteractionListener");
}
}
@Override
public void onDetach() {
super.onDetach();
mListener = null;
}
public void getStarted() {
if (mListener != null) {
mListener.onGettingStarted();
}
}
public interface OnSignedInInteractionListener {
void onGettingStarted();
}
}

View file

@ -1,10 +1,9 @@
package io.highfidelity.hifiinterface.fragment; package io.highfidelity.hifiinterface.fragment;
import android.app.Activity;
import android.app.Fragment; import android.app.Fragment;
import android.app.ProgressDialog;
import android.content.Context; import android.content.Context;
import android.os.Bundle; import android.os.Bundle;
import android.view.KeyEvent;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
@ -27,16 +26,17 @@ public class SignupFragment extends Fragment {
private EditText mUsername; private EditText mUsername;
private EditText mPassword; private EditText mPassword;
private TextView mError; private TextView mError;
private TextView mCancelButton; private TextView mActivityText;
private Button mSignupButton; private Button mSignupButton;
private ProgressDialog mDialog; private ViewGroup mSignupForm;
private ViewGroup mLoggingInFrame;
private ViewGroup mLoggedInFrame;
public native void nativeSignup(String email, String username, String password); // move to SignupFragment public native void signup(String email, String username, String password); // move to SignupFragment
public native void nativeCancelSignup(); public native void cancelSignup();
public native void nativeLogin(String username, String password, Activity usernameChangedListener); public native void login(String username, String password);
public native void nativeCancelLogin(); public native void cancelLogin();
private SignupFragment.OnSignupInteractionListener mListener; private SignupFragment.OnSignupInteractionListener mListener;
@ -59,18 +59,20 @@ public class SignupFragment extends Fragment {
mPassword = rootView.findViewById(R.id.password); mPassword = rootView.findViewById(R.id.password);
mError = rootView.findViewById(R.id.error); mError = rootView.findViewById(R.id.error);
mSignupButton = rootView.findViewById(R.id.signupButton); mSignupButton = rootView.findViewById(R.id.signupButton);
mCancelButton = rootView.findViewById(R.id.cancelButton); mActivityText = rootView.findViewById(R.id.activityText);
mSignupForm = rootView.findViewById(R.id.signupForm);
mLoggedInFrame = rootView.findViewById(R.id.loggedInFrame);
mLoggingInFrame = rootView.findViewById(R.id.loggingInFrame);
rootView.findViewById(R.id.cancel).setOnClickListener(view -> onCancelSignup());
mSignupButton.setOnClickListener(view -> signup()); mSignupButton.setOnClickListener(view -> signup());
mCancelButton.setOnClickListener(view -> login());
mPassword.setOnEditorActionListener( rootView.findViewById(R.id.getStarted).setOnClickListener(view -> onGetStartedPressed());
(textView, actionId, keyEvent) -> {
if (actionId == EditorInfo.IME_ACTION_DONE) { mPassword.setOnEditorActionListener((textView, actionId, keyEvent) -> onPasswordEditorAction(textView, actionId, keyEvent));
mSignupButton.performClick();
return true;
}
return false;
});
return rootView; return rootView;
} }
@ -101,15 +103,23 @@ public class SignupFragment extends Fragment {
@Override @Override
public void onStop() { public void onStop() {
super.onStop(); super.onStop();
cancelActivityIndicator(); showSignupForm();
// Leave the Qt app paused // Leave the Qt app paused
QtNative.setApplicationState(ApplicationInactive); QtNative.setApplicationState(ApplicationInactive);
hideKeyboard(); hideKeyboard();
} }
private void login() { private boolean onPasswordEditorAction(TextView textView, int actionId, KeyEvent keyEvent) {
if (actionId == EditorInfo.IME_ACTION_DONE) {
mSignupButton.performClick();
return true;
}
return false;
}
private void onCancelSignup() {
if (mListener != null) { if (mListener != null) {
mListener.onLoginRequested(); mListener.onCancelSignup();
} }
} }
@ -123,8 +133,9 @@ public class SignupFragment extends Fragment {
} else { } else {
mSignupButton.setEnabled(false); mSignupButton.setEnabled(false);
hideError(); hideError();
mActivityText.setText(R.string.creating_account);
showActivityIndicator(); showActivityIndicator();
nativeSignup(email, username, password); signup(email, username, password);
} }
} }
@ -137,23 +148,21 @@ public class SignupFragment extends Fragment {
} }
private void showActivityIndicator() { private void showActivityIndicator() {
if (mDialog == null) { mSignupForm.setVisibility(View.GONE);
mDialog = new ProgressDialog(getContext()); mLoggedInFrame.setVisibility(View.GONE);
} mLoggingInFrame.setVisibility(View.VISIBLE);
mDialog.setMessage(getString(R.string.creating_account));
mDialog.setCancelable(true);
mDialog.setOnCancelListener(dialogInterface -> {
nativeCancelSignup();
cancelActivityIndicator();
mSignupButton.setEnabled(true);
});
mDialog.show();
} }
private void cancelActivityIndicator() { private void showLoggedInMessage() {
if (mDialog != null) { mSignupForm.setVisibility(View.GONE);
mDialog.cancel(); mLoggingInFrame.setVisibility(View.GONE);
mLoggedInFrame.setVisibility(View.VISIBLE);
} }
private void showSignupForm() {
mLoggingInFrame.setVisibility(View.GONE);
mLoggedInFrame.setVisibility(View.GONE);
mSignupForm.setVisibility(View.VISIBLE);
} }
private void showError(String error) { private void showError(String error) {
mError.setText(error); mError.setText(error);
@ -167,29 +176,30 @@ public class SignupFragment extends Fragment {
public interface OnSignupInteractionListener { public interface OnSignupInteractionListener {
void onSignupCompleted(); void onSignupCompleted();
void onLoginRequested(); void onCancelSignup();
} }
private void onGetStartedPressed() {
if (mListener != null) {
mListener.onSignupCompleted();
}
}
public void handleSignupCompleted() { public void handleSignupCompleted() {
String username = mUsername.getText().toString().trim(); String username = mUsername.getText().toString().trim();
String password = mPassword.getText().toString(); String password = mPassword.getText().toString();
mDialog.setMessage(getString(R.string.logging_in)); getActivity().runOnUiThread(() -> {
mDialog.setCancelable(true); mActivityText.setText(R.string.logging_in);
mDialog.setOnCancelListener(dialogInterface -> {
nativeCancelLogin();
cancelActivityIndicator();
if (mListener != null) {
mListener.onLoginRequested();
}
}); });
mDialog.show();
nativeLogin(username, password, getActivity()); login(username, password);
} }
public void handleSignupFailed(String error) { public void handleSignupFailed(String error) {
getActivity().runOnUiThread(() -> { getActivity().runOnUiThread(() -> {
mSignupButton.setEnabled(true); mSignupButton.setEnabled(true);
cancelActivityIndicator(); showSignupForm();
mError.setText(error); mError.setText(error);
mError.setVisibility(View.VISIBLE); mError.setVisibility(View.VISIBLE);
}); });
@ -198,20 +208,15 @@ public class SignupFragment extends Fragment {
public void handleLoginCompleted(boolean success) { public void handleLoginCompleted(boolean success) {
getActivity().runOnUiThread(() -> { getActivity().runOnUiThread(() -> {
mSignupButton.setEnabled(true); mSignupButton.setEnabled(true);
cancelActivityIndicator();
if (success) { if (success) {
if (mListener != null) { showLoggedInMessage();
mListener.onSignupCompleted();
}
} else { } else {
// Registration was successful but login failed. // Registration was successful but login failed.
// Let the user to login manually // Let the user to login manually
mListener.onLoginRequested(); mListener.onCancelSignup();
showSignupForm();
} }
}); });
} }
} }

View file

@ -0,0 +1,85 @@
package io.highfidelity.hifiinterface.fragment;
import android.content.Context;
import android.os.Bundle;
import android.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import io.highfidelity.hifiinterface.R;
public class StartMenuFragment extends Fragment {
private StartMenuInteractionListener mListener;
public StartMenuFragment() {
// Required empty public constructor
}
public static StartMenuFragment newInstance() {
StartMenuFragment fragment = new StartMenuFragment();
return fragment;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View rootView = inflater.inflate(R.layout.fragment_login_menu, container, false);
rootView.findViewById(R.id.signupButton).setOnClickListener(view -> {
if (mListener != null) {
mListener.onSignupButtonClicked();
}
});
rootView.findViewById(R.id.loginButton).setOnClickListener(view -> {
if (mListener != null) {
mListener.onLoginButtonClicked();
}
});
rootView.findViewById(R.id.takeMeInWorld).setOnClickListener(view -> {
if (mListener != null) {
mListener.onSkipLoginClicked();
}
});
return rootView;
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
if (context instanceof StartMenuInteractionListener) {
mListener = (StartMenuInteractionListener) context;
} else {
throw new RuntimeException(context.toString()
+ " must implement StartMenuInteractionListener");
}
}
@Override
public void onDetach() {
super.onDetach();
mListener = null;
}
/**
* This interface must be implemented by activities that contain this
* fragment to allow an interaction in this fragment to be communicated
* to the activity and potentially other fragments contained in that
* activity.
* <p>
* See the Android Training lesson <a href=
* "http://developer.android.com/training/basics/fragments/communicating.html"
* >Communicating with Other Fragments</a> for more information.
*/
public interface StartMenuInteractionListener {
void onSignupButtonClicked();
void onLoginButtonClicked();
void onSkipLoginClicked();
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

View file

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android" <vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="350dp" android:width="340dp"
android:height="100dp" android:height="100dp"
android:viewportWidth="350" android:viewportWidth="350"
android:viewportHeight="100"> android:viewportHeight="100">

View file

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="11dp"
android:height="14dp"
android:viewportWidth="11"
android:viewportHeight="14">
<path
android:fillColor="#ffffff"
android:pathData="M2.98427,0.868092 C2.35913,0.324495,1.41169,0.390596,0.868092,1.01573 C0.324495,1.64087,0.390596,2.58831,1.01573,3.13191 L2.98427,0.868092 Z M8,7.21739 L8.93497,8.39035 L10.3436,7.26752 L8.98427,6.08548 L8,7.21739 Z M1.06503,10.827 C0.417224,11.3434,0.310672,12.2872,0.82704,12.935 C1.34341,13.5828,2.28716,13.6893,2.93497,13.173 L1.06503,10.827 Z M1.01573,3.13191 L7.01573,8.3493 L8.98427,6.08548 L2.98427,0.868092 L1.01573,3.13191 Z M7.06503,6.04443 L1.06503,10.827 L2.93497,13.173 L8.93497,8.39035 L7.06503,6.04443 Z" />
</vector>

View file

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:state_pressed="true" >
<shape android:shape="rectangle" >
<corners android:radius="4dip" />
<stroke android:width="1dip" android:color="@color/colorButton2" />
<solid android:color="@color/colorButton2"/>
</shape>
</item>
<item android:state_focused="true">
<shape android:shape="rectangle" >
<corners android:radius="4dip" />
<stroke android:width="1dip" android:color="@color/colorButton2" />
<solid android:color="@color/colorButton2"/>
</shape>
</item>
<item>
<shape android:shape="rectangle" >
<corners android:radius="4dip" />
<stroke android:width="1dip" android:color="@color/colorButton2" />
<solid android:color="@color/colorButton2"/>
</shape>
</item>
</selector>

View file

@ -1,7 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" android:padding="9dp">
<corners android:radius="4dip" />
<stroke android:width="1dip" android:color="@android:color/black" />
<solid android:color="@color/backgroundEditText"/>
</shape>

View file

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 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"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".LoginMenuActivity">
<FrameLayout
android:id="@+id/content_frame"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</android.support.constraint.ConstraintLayout>

View file

@ -6,6 +6,17 @@
android:layout_height="match_parent" android:layout_height="match_parent"
android:background="@color/backgroundLight"> android:background="@color/backgroundLight">
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/encourage_login_background"
android:scaleType="fitXY" />
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#B2000000" />
<ImageView <ImageView
android:id="@+id/header" android:id="@+id/header"
android:layout_width="@dimen/header_hifi_width" android:layout_width="@dimen/header_hifi_width"
@ -17,6 +28,90 @@
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@drawable/hifi_header" /> app:srcCompat="@drawable/hifi_header" />
<android.support.constraint.ConstraintLayout
android:id="@+id/loggingInFrame"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginTop="100dp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/header"
app:layout_constraintBottom_toBottomOf="parent"
android:visibility="gone">
<TextView
android:id="@+id/loggingInText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/logging_in"
android:fontFamily="@font/raleway_bold"
android:textSize="24sp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
android:layout_marginTop="83dp"
/>
<ProgressBar
android:layout_width="101dp"
android:layout_height="101dp"
android:layout_marginTop="20dp"
app:layout_constraintTop_toBottomOf="@id/loggingInText"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
android:indeterminateTint="#00B4EF"
/>
</android.support.constraint.ConstraintLayout>
<android.support.constraint.ConstraintLayout
android:id="@+id/loggedInFrame"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginTop="100dp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/header"
app:layout_constraintBottom_toBottomOf="parent"
android:visibility="gone">
<TextView
android:id="@+id/loggedInText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/logged_in_welcome"
android:fontFamily="@font/raleway_bold"
android:textSize="24sp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
android:layout_marginTop="115dp"
/>
<Button
android:id="@+id/getStarted"
android:layout_width="171dp"
android:layout_height="42dp"
android:layout_marginTop="22dp"
android:background="@drawable/rounded_button_color1"
android:fontFamily="@font/raleway_bold"
android:text="@string/get_started"
android:textColor="@color/white_opaque"
android:textAllCaps="false"
android:textSize="18sp"
app:layout_constraintTop_toBottomOf="@id/loggedInText"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_goneMarginTop="4dp"/>
</android.support.constraint.ConstraintLayout>
<android.support.constraint.ConstraintLayout
android:id="@+id/loginForm"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginTop="100dp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/header"
app:layout_constraintBottom_toBottomOf="parent"
android:visibility="visible">
<TextView <TextView
android:id="@+id/error" android:id="@+id/error"
android:layout_width="wrap_content" android:layout_width="wrap_content"
@ -24,7 +119,7 @@
android:layout_marginBottom="25dp" android:layout_marginBottom="25dp"
android:layout_marginLeft="9dp" android:layout_marginLeft="9dp"
android:layout_marginRight="9dp" android:layout_marginRight="9dp"
android:fontFamily="@font/raleway" android:fontFamily="sans-serif"
android:textColor="@color/colorLoginError" android:textColor="@color/colorLoginError"
android:textSize="14sp" android:textSize="14sp"
app:layout_constraintBottom_toTopOf="@id/username" app:layout_constraintBottom_toTopOf="@id/username"
@ -34,53 +129,48 @@
<EditText <EditText
android:id="@+id/username" android:id="@+id/username"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="35dp" android:layout_height="27dp"
android:layout_marginLeft="46dp" android:layout_marginLeft="72dp"
android:layout_marginRight="46dp" android:layout_marginRight="72dp"
android:background="@drawable/rounded_edit" android:background="@color/white_opaque"
android:padding="7dp" android:paddingLeft="16dp"
android:paddingRight="12dp"
android:paddingTop="14dp"
android:ems="10" android:ems="10"
android:fontFamily="@font/raleway" android:fontFamily="sans-serif"
android:textSize="17sp" android:textSize="14sp"
android:inputType="textEmailAddress" android:inputType="textEmailAddress"
android:textStyle="italic"
android:textColor="@color/editTextColor" android:textColor="@color/editTextColor"
android:textColorHint="@color/editTextColor" android:textColorHint="@color/editTextColor"
android:gravity="left|center_vertical" android:gravity="left|center_vertical"
app:layout_constraintTop_toBottomOf="@id/header" android:hint="@string/username_or_email"
android:layout_marginTop="70dp" app:layout_constraintTop_toTopOf="parent"
android:hint="@string/username_or_email" /> android:layout_marginTop="83dp"/>
<android.support.design.widget.TextInputLayout <android.support.design.widget.TextInputLayout
android:id="@+id/passwordLayout" android:id="@+id/passwordLayout"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginLeft="46dp" android:layout_marginLeft="72dp"
android:layout_marginRight="46dp" android:layout_marginRight="72dp"
android:background="@color/white_opaque"
app:passwordToggleTint="@color/showPasswordColor" app:passwordToggleTint="@color/showPasswordColor"
app:passwordToggleEnabled="true" app:passwordToggleEnabled="true"
app:hintAnimationEnabled="false" app:hintAnimationEnabled="false"
app:passwordToggleDrawable="@drawable/selector_show_password" app:passwordToggleDrawable="@drawable/selector_show_password"
app:hintEnabled="false" app:hintEnabled="false"
app:layout_constraintTop_toBottomOf="@id/username" app:layout_constraintTop_toBottomOf="@id/username"
android:layout_marginTop="13dp" android:layout_marginTop="15dp"
> >
<android.support.design.widget.TextInputEditText <android.support.design.widget.TextInputEditText
android:id="@+id/password" android:id="@+id/password"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="35dp" android:layout_height="27dp"
android:background="@drawable/rounded_edit" android:background="@color/white_opaque"
android:padding="7dp" android:paddingLeft="16dp"
android:drawablePadding="55dp" android:drawablePadding="45dp"
android:paddingTop="14dp"
android:drawableEnd="@drawable/ic_eye_noshow" android:drawableEnd="@drawable/ic_eye_noshow"
android:ems="10" android:ems="10"
android:fontFamily="@font/raleway" android:fontFamily="sans-serif"
android:textSize="17sp" android:textSize="14sp"
android:textStyle="italic"
android:textColor="@color/editTextColor" android:textColor="@color/editTextColor"
android:textColorHint="@color/editTextColor" android:textColorHint="@color/editTextColor"
android:gravity="left|center_vertical" android:gravity="left|center_vertical"
@ -89,54 +179,95 @@
android:inputType="textPassword" /> android:inputType="textPassword" />
</android.support.design.widget.TextInputLayout> </android.support.design.widget.TextInputLayout>
<CheckBox
android:id="@+id/keepMeLoggedIn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="13dp"
android:layout_marginRight="66dp"
app:layout_constraintTop_toBottomOf="@id/passwordLayout"
app:layout_constraintRight_toRightOf="parent"
android:padding="0dp" />
<TextView
android:id="@+id/keepMeLoggedInLabel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/raleway_bold"
android:textSize="12sp"
android:text="@string/keep_me_logged_in"
app:layout_constraintRight_toLeftOf="@id/keepMeLoggedIn"
app:layout_constraintTop_toTopOf="@id/keepMeLoggedIn"
app:layout_constraintBottom_toBottomOf="@id/keepMeLoggedIn"
android:textColor="@color/white_opaque"/>
<Button <Button
android:id="@+id/loginButton" android:id="@+id/loginButton"
android:layout_width="154dp" android:layout_width="171dp"
android:layout_height="38dp" android:layout_height="42dp"
android:background="@drawable/rounded_button" android:background="@drawable/rounded_button_color3"
android:fontFamily="@font/raleway_semibold" android:fontFamily="@font/raleway_bold"
android:paddingBottom="0dp" android:layout_marginTop="10dp"
android:paddingTop="0dp" android:text="@string/log_in"
android:text="@string/login"
android:textColor="@color/white_opaque" android:textColor="@color/white_opaque"
android:textAllCaps="false" android:textAllCaps="false"
android:textSize="18sp" android:textSize="18sp"
app:layout_constraintRight_toRightOf="@id/username" app:layout_constraintRight_toRightOf="@id/username"
app:layout_constraintTop_toBottomOf="@id/forgotPassword" app:layout_constraintTop_toBottomOf="@id/keepMeLoggedIn" />
app:layout_goneMarginTop="4dp"/>
<TextView
android:id="@+id/cancel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="8dp"
app:layout_constraintLeft_toLeftOf="@id/passwordLayout"
app:layout_constraintTop_toTopOf="@id/loginButton"
app:layout_constraintBottom_toBottomOf="@id/loginButton"
app:layout_constraintRight_toLeftOf="@id/loginButton"
android:textColor="@color/white_opaque"
android:fontFamily="@font/raleway_bold"
android:textSize="18sp"
android:text="@string/cancel_uppercase" />
<TextView <TextView
android:id="@+id/forgotPassword" android:id="@+id/forgotPassword"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:paddingTop="9dp" android:fontFamily="sans-serif"
android:paddingBottom="16dp" android:textSize="14sp"
android:fontFamily="@font/raleway_semibold" android:layout_marginTop="18dp"
android:textSize="14dp" android:text="@string/cant_access_your_account"
android:text="@string/forgot_password" app:layout_constraintLeft_toLeftOf="parent"
android:textStyle="italic" app:layout_constraintRight_toRightOf="parent"
app:layout_constraintRight_toRightOf="@id/passwordLayout" app:layout_constraintTop_toBottomOf="@id/loginButton"
app:layout_constraintTop_toBottomOf="@id/passwordLayout"
android:textColor="@color/colorButton1"/> android:textColor="@color/colorButton1"/>
<Button <TextView
android:id="@+id/signupButton" android:id="@+id/takeMeInWorld"
android:layout_width="0dp" android:layout_width="wrap_content"
app:layout_constraintWidth_default="spread" android:layout_height="wrap_content"
android:layout_height="38dp" android:fontFamily="@font/raleway_bold"
android:background="@drawable/rounded_secondary_button" android:textSize="14sp"
android:fontFamily="@font/raleway_semibold" android:layout_marginBottom="11dp"
android:paddingBottom="0dp" android:padding="5dp"
android:paddingTop="0dp" android:text="@string/take_me_in_world"
android:layout_marginRight="15dp" app:layout_constraintLeft_toLeftOf="parent"
android:text="@string/signup" app:layout_constraintRight_toRightOf="parent"
android:textColor="@color/white_opaque" app:layout_constraintBottom_toBottomOf="parent"
android:textAllCaps="false" android:textColor="@color/white_opaque"/>
android:textSize="18sp"
app:layout_constraintLeft_toLeftOf="@id/passwordLayout" <ImageView
app:layout_constraintTop_toTopOf="@id/loginButton" android:layout_width="wrap_content"
app:layout_constraintRight_toLeftOf="@id/loginButton" android:layout_height="wrap_content"
app:layout_goneMarginTop="4dp"/> android:src="@drawable/ic_right_arrow"
android:layout_marginLeft="4dp"
app:layout_constraintLeft_toRightOf="@id/takeMeInWorld"
app:layout_constraintTop_toTopOf="@id/takeMeInWorld"
app:layout_constraintBottom_toBottomOf="@id/takeMeInWorld"
/>
</android.support.constraint.ConstraintLayout>

View file

@ -0,0 +1,104 @@
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 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"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".fragment.StartMenuFragment">
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/encourage_login_background"
android:scaleType="fitXY"
/>
<ImageView
android:id="@+id/header"
android:layout_width="@dimen/header_hifi_width"
android:layout_height="@dimen/header_hifi_height"
android:layout_marginTop="@dimen/header_hifi_margin_top"
android:contentDescription="HighFidelity"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@drawable/hifi_header" />
<TextView
android:id="@+id/text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fontFamily="@font/raleway_bold"
android:textSize="22sp"
android:layout_marginTop="37dp"
android:text="@string/be_anywere"
android:gravity="center"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/header"
/>
<Button
android:id="@+id/signupButton"
android:layout_width="238dp"
android:layout_height="41dp"
android:layout_marginTop="48dp"
android:background="@drawable/rounded_button_color1"
android:fontFamily="@font/raleway_bold"
android:text="@string/signup_uppercase"
android:textColor="@color/white_opaque"
android:textAllCaps="false"
android:textSize="18sp"
app:layout_constraintTop_toBottomOf="@id/text"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent" />
<android.support.constraint.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="270dp"
app:layout_constraintBottom_toBottomOf="parent" android:background="#B2000000">
<Button
android:id="@+id/loginButton"
android:layout_width="238dp"
android:layout_height="42dp"
android:background="@drawable/rounded_button_color3"
android:fontFamily="@font/raleway_bold"
android:layout_marginTop="86dp"
android:text="@string/log_in"
android:textColor="@color/white_opaque"
android:textAllCaps="false"
android:textSize="18sp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"/>
<TextView
android:id="@+id/takeMeInWorld"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/raleway_bold"
android:textSize="14sp"
android:layout_marginBottom="11dp"
android:padding="5dp"
android:text="@string/take_me_in_world"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
android:textColor="@color/white_opaque"/>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_right_arrow"
android:layout_marginLeft="4dp"
app:layout_constraintLeft_toRightOf="@id/takeMeInWorld"
app:layout_constraintTop_toTopOf="@id/takeMeInWorld"
app:layout_constraintBottom_toBottomOf="@id/takeMeInWorld"
/>
</android.support.constraint.ConstraintLayout>
</android.support.constraint.ConstraintLayout>

View file

@ -1,63 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 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"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/backgroundLight">
<ImageView
android:id="@+id/header"
android:layout_width="@dimen/header_hifi_width"
android:layout_height="@dimen/header_hifi_height"
android:layout_marginTop="@dimen/header_hifi_margin_top"
android:contentDescription="HighFidelity"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@drawable/hifi_header" />
<TextView
android:id="@+id/welcome"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="50dp"
android:paddingLeft="86dp"
android:paddingRight="86dp"
android:fontFamily="@font/raleway"
android:textColor="@color/clearText"
android:textSize="24sp"
android:text="@string/signedin_welcome"
app:layout_constraintTop_toBottomOf="@id/header"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
android:gravity="center"
/>
<Button
android:id="@+id/getStarted"
android:layout_width="217dp"
android:layout_height="38dp"
android:layout_marginTop="30dp"
android:background="@drawable/rounded_button"
android:fontFamily="@font/raleway_semibold"
android:paddingBottom="0dp"
android:paddingLeft="25dp"
android:paddingRight="25dp"
android:paddingTop="0dp"
android:text="@string/get_started"
android:textColor="@color/white_opaque"
android:textAllCaps="false"
android:textSize="18sp"
app:layout_constraintTop_toBottomOf="@id/welcome"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_goneMarginTop="4dp"/>
</android.support.constraint.ConstraintLayout>

View file

@ -6,6 +6,18 @@
android:layout_height="match_parent" android:layout_height="match_parent"
android:background="@color/backgroundLight"> android:background="@color/backgroundLight">
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/encourage_login_background"
android:scaleType="fitXY" />
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#B2000000" />
<ImageView <ImageView
android:id="@+id/header" android:id="@+id/header"
android:layout_width="@dimen/header_hifi_width" android:layout_width="@dimen/header_hifi_width"
@ -17,93 +29,168 @@
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@drawable/hifi_header" /> app:srcCompat="@drawable/hifi_header" />
<android.support.constraint.ConstraintLayout
android:id="@+id/loggingInFrame"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginTop="100dp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/header"
app:layout_constraintBottom_toBottomOf="parent"
android:visibility="gone">
<TextView
android:id="@+id/activityText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/logging_in"
android:fontFamily="@font/raleway_bold"
android:textSize="24sp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
android:layout_marginTop="83dp"
/>
<ProgressBar
android:layout_width="101dp"
android:layout_height="101dp"
android:layout_marginTop="20dp"
app:layout_constraintTop_toBottomOf="@id/activityText"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
android:indeterminateTint="#00B4EF"
/>
</android.support.constraint.ConstraintLayout>
<android.support.constraint.ConstraintLayout
android:id="@+id/loggedInFrame"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginTop="100dp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/header"
app:layout_constraintBottom_toBottomOf="parent"
android:visibility="gone">
<TextView
android:id="@+id/loggedInText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/logged_in_welcome"
android:fontFamily="@font/raleway_bold"
android:textSize="24sp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
android:layout_marginTop="115dp"
/>
<Button
android:id="@+id/getStarted"
android:layout_width="171dp"
android:layout_height="42dp"
android:layout_marginTop="22dp"
android:background="@drawable/rounded_button_color1"
android:fontFamily="@font/raleway_bold"
android:text="@string/get_started"
android:textColor="@color/white_opaque"
android:textAllCaps="false"
android:textSize="18sp"
app:layout_constraintTop_toBottomOf="@id/loggedInText"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent" />
</android.support.constraint.ConstraintLayout>
<android.support.constraint.ConstraintLayout
android:id="@+id/signupForm"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginTop="100dp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/header"
app:layout_constraintBottom_toBottomOf="parent"
android:visibility="visible">
<TextView <TextView
android:id="@+id/error" android:id="@+id/error"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginBottom="16dp" android:layout_marginBottom="16dp"
android:layout_marginLeft="9dp" android:fontFamily="sans-serif"
android:layout_marginRight="9dp"
android:fontFamily="@font/raleway"
android:textColor="@color/colorLoginError" android:textColor="@color/colorLoginError"
android:textSize="14sp" android:textSize="14sp"
app:layout_constraintBottom_toTopOf="@id/email" app:layout_constraintBottom_toTopOf="@id/username"
app:layout_constraintLeft_toLeftOf="@id/email" app:layout_constraintTop_toTopOf="parent"
app:layout_constraintRight_toRightOf="@id/email" app:layout_constraintLeft_toLeftOf="@id/username"
app:layout_constraintRight_toRightOf="@id/username"
android:visibility="invisible"/> android:visibility="invisible"/>
<EditText
android:id="@+id/email"
android:layout_width="match_parent"
android:layout_height="35dp"
android:layout_marginLeft="46dp"
android:layout_marginRight="46dp"
android:background="@drawable/rounded_edit"
android:padding="7dp"
android:paddingRight="12dp"
android:paddingTop="14dp"
android:ems="10"
android:fontFamily="@font/raleway"
android:textSize="17sp"
android:inputType="textEmailAddress"
android:textStyle="italic"
android:textColor="@color/editTextColor"
android:textColorHint="@color/editTextColor"
android:gravity="left|center_vertical"
app:layout_constraintTop_toBottomOf="@id/header"
android:layout_marginTop="70dp"
android:hint="@string/email" />
<EditText <EditText
android:id="@+id/username" android:id="@+id/username"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="35dp" android:layout_height="27dp"
android:layout_marginLeft="46dp" android:layout_marginLeft="76dp"
android:layout_marginRight="46dp" android:layout_marginRight="76dp"
android:background="@drawable/rounded_edit" android:background="@color/white_opaque"
android:padding="7dp" android:paddingLeft="16dp"
android:paddingRight="12dp"
android:paddingTop="14dp"
android:ems="10" android:ems="10"
android:fontFamily="@font/raleway" android:fontFamily="sans-serif"
android:textSize="17sp" android:textSize="14sp"
android:inputType="text" android:inputType="text"
android:textStyle="italic"
android:textColor="@color/editTextColor" android:textColor="@color/editTextColor"
android:textColorHint="@color/editTextColor" android:textColorHint="@color/editTextColor"
android:gravity="left|center_vertical" android:gravity="left|center_vertical"
app:layout_constraintTop_toBottomOf="@id/email" app:layout_constraintTop_toTopOf="parent"
android:layout_marginTop="7dp" android:layout_marginTop="70dp"
android:hint="@string/username" /> android:hint="@string/username" />
<EditText
android:id="@+id/email"
android:layout_width="match_parent"
android:layout_height="27dp"
android:layout_marginLeft="76dp"
android:layout_marginRight="76dp"
android:background="@color/white_opaque"
android:paddingLeft="16dp"
android:ems="10"
android:fontFamily="sans-serif"
android:textSize="14sp"
android:inputType="textEmailAddress"
android:textColor="@color/editTextColor"
android:textColorHint="@color/editTextColor"
android:gravity="left|center_vertical"
app:layout_constraintTop_toBottomOf="@id/username"
android:layout_marginTop="14dp"
android:hint="@string/email" />
<android.support.design.widget.TextInputLayout <android.support.design.widget.TextInputLayout
android:id="@+id/passwordLayout" android:id="@+id/passwordLayout"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginLeft="46dp" android:layout_marginLeft="76dp"
android:layout_marginRight="46dp" android:layout_marginRight="76dp"
app:passwordToggleTint="@color/showPasswordColor" app:passwordToggleTint="@color/showPasswordColor"
app:passwordToggleEnabled="true" app:passwordToggleEnabled="true"
app:hintAnimationEnabled="false" app:hintAnimationEnabled="false"
app:passwordToggleDrawable="@drawable/selector_show_password" app:passwordToggleDrawable="@drawable/selector_show_password"
app:hintEnabled="false" app:hintEnabled="false"
app:layout_constraintTop_toBottomOf="@id/username" app:layout_constraintTop_toBottomOf="@id/email"
android:layout_marginTop="7dp" android:layout_marginTop="15dp"
> >
<android.support.design.widget.TextInputEditText <android.support.design.widget.TextInputEditText
android:id="@+id/password" android:id="@+id/password"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="35dp" android:layout_height="27dp"
android:background="@drawable/rounded_edit" android:background="@color/white_opaque"
android:padding="7dp" android:paddingLeft="16dp"
android:drawablePadding="55dp" android:drawablePadding="55dp"
android:paddingTop="14dp"
android:drawableEnd="@drawable/ic_eye_noshow" android:drawableEnd="@drawable/ic_eye_noshow"
android:ems="10" android:ems="10"
android:fontFamily="@font/raleway" android:fontFamily="sans-serif"
android:textSize="17sp" android:textSize="14sp"
android:textStyle="italic"
android:textColor="@color/editTextColor" android:textColor="@color/editTextColor"
android:textColorHint="@color/editTextColor" android:textColorHint="@color/editTextColor"
android:gravity="left|center_vertical" android:gravity="left|center_vertical"
@ -112,40 +199,54 @@
android:inputType="textPassword" /> android:inputType="textPassword" />
</android.support.design.widget.TextInputLayout> </android.support.design.widget.TextInputLayout>
<CheckBox
android:id="@+id/keepMeLoggedIn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="13dp"
android:layout_marginRight="66dp"
app:layout_constraintTop_toBottomOf="@id/passwordLayout"
app:layout_constraintRight_toRightOf="parent"
android:padding="0dp" />
<TextView
android:id="@+id/keepMeLoggedInLabel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/raleway_bold"
android:textSize="12sp"
android:text="@string/keep_me_logged_in"
app:layout_constraintRight_toLeftOf="@id/keepMeLoggedIn"
app:layout_constraintTop_toTopOf="@id/keepMeLoggedIn"
app:layout_constraintBottom_toBottomOf="@id/keepMeLoggedIn"
android:textColor="@color/white_opaque"/>
<Button <Button
android:id="@+id/signupButton" android:id="@+id/signupButton"
android:layout_width="154dp" android:layout_width="171dp"
android:layout_height="38dp" android:layout_height="42dp"
android:layout_marginTop="44dp" android:layout_marginTop="10dp"
android:background="@drawable/rounded_button" android:background="@drawable/rounded_button_color1"
android:fontFamily="@font/raleway_semibold" android:fontFamily="@font/raleway_bold"
android:paddingBottom="0dp" android:text="@string/signup_uppercase"
android:paddingTop="0dp"
android:text="@string/signup"
android:textColor="@color/white_opaque" android:textColor="@color/white_opaque"
android:textAllCaps="false" android:textAllCaps="false"
android:textSize="18sp" android:textSize="18sp"
app:layout_constraintRight_toRightOf="@id/username" app:layout_constraintRight_toRightOf="@id/username"
app:layout_constraintTop_toBottomOf="@id/passwordLayout" app:layout_constraintTop_toBottomOf="@id/keepMeLoggedIn" />
app:layout_goneMarginTop="4dp"/>
<Button <TextView
android:id="@+id/cancelButton" android:id="@+id/cancel"
android:layout_width="0dp" android:layout_width="wrap_content"
app:layout_constraintWidth_default="spread" android:layout_height="wrap_content"
android:layout_height="38dp"
android:background="@drawable/rounded_secondary_button"
android:fontFamily="@font/raleway_semibold"
android:paddingBottom="0dp"
android:paddingTop="0dp"
android:layout_marginRight="15dp"
android:text="@string/cancel"
android:textColor="@color/white_opaque"
android:textAllCaps="false"
android:textSize="18sp"
app:layout_constraintLeft_toLeftOf="@id/passwordLayout" app:layout_constraintLeft_toLeftOf="@id/passwordLayout"
app:layout_constraintTop_toTopOf="@id/signupButton" app:layout_constraintTop_toTopOf="@id/signupButton"
app:layout_constraintBottom_toBottomOf="@id/signupButton"
app:layout_constraintRight_toLeftOf="@id/signupButton" app:layout_constraintRight_toLeftOf="@id/signupButton"
app:layout_goneMarginTop="4dp"/> android:textColor="@color/white_opaque"
android:fontFamily="@font/raleway_bold"
android:textSize="18dp"
android:text="@string/cancel_uppercase" />
</android.support.constraint.ConstraintLayout>
</android.support.constraint.ConstraintLayout> </android.support.constraint.ConstraintLayout>

View file

@ -10,6 +10,7 @@
<color name="tabs">#1EB5EC</color> <color name="tabs">#1EB5EC</color>
<color name="colorButton1">#00B4EF</color> <color name="colorButton1">#00B4EF</color>
<color name="colorButton2">#828282</color> <color name="colorButton2">#828282</color>
<color name="colorButton3">#8F8F8F</color>
<color name="backgroundDark">#333333</color> <color name="backgroundDark">#333333</color>
<color name="backgroundLight">#4F4F4F</color> <color name="backgroundLight">#4F4F4F</color>
<color name="backgroundSearch">#33999999</color> <color name="backgroundSearch">#33999999</color>

View file

@ -33,9 +33,9 @@
<dimen name="domainMarginBottom">6dp</dimen> <dimen name="domainMarginBottom">6dp</dimen>
<dimen name="domainNameHeight">64dp</dimen> <dimen name="domainNameHeight">64dp</dimen>
<dimen name="header_hifi_margin_top">56dp</dimen> <dimen name="header_hifi_margin_top">35dp</dimen>
<dimen name="header_hifi_height">101dp</dimen> <dimen name="header_hifi_height">84dp</dimen>
<dimen name="header_hifi_width">425dp</dimen> <dimen name="header_hifi_width">340dp</dimen>
<dimen name="list_vertical_padding">8dp</dimen> <dimen name="list_vertical_padding">8dp</dimen>

View file

@ -16,9 +16,9 @@
<string name="password">Password</string> <string name="password">Password</string>
<string name="login">Login</string> <string name="login">Login</string>
<string name="logout">Logout</string> <string name="logout">Logout</string>
<string name="forgot_password"><u>Forgot password?</u>\u00A0</string> <string name="cant_access_your_account"><u>Can\u0027t access your account?</u></string>
<string name="login_username_or_password_incorrect">Username or password incorrect.</string> <string name="login_username_or_password_incorrect">Username or password incorrect.</string>
<string name="logging_in">Logging into High Fidelity</string> <string name="logging_in">Logging in</string>
<string name="search_hint"><i>Search for a place by name</i>\u00A0</string> <string name="search_hint"><i>Search for a place by name</i>\u00A0</string>
<string name="search_loading">Loading places…</string> <string name="search_loading">Loading places…</string>
<string name="search_no_results">No places exist with that name</string> <string name="search_no_results">No places exist with that name</string>
@ -26,12 +26,15 @@
<string name="your_last_location">Your Last Location</string> <string name="your_last_location">Your Last Location</string>
<string name="online">Online</string> <string name="online">Online</string>
<string name="signup">Sign Up</string> <string name="signup">Sign Up</string>
<string name="signup_uppercase">SIGN UP</string>
<string name="creating_account">Creating your High Fidelity account</string> <string name="creating_account">Creating your High Fidelity account</string>
<string name="signup_email_username_or_password_incorrect">Email, username or password incorrect.</string> <string name="signup_email_username_or_password_incorrect">Email, username or password incorrect.</string>
<string name="signedin_welcome">You are now signed into High Fidelity</string> <string name="signedin_welcome">You are now signed into High Fidelity</string>
<string name="logged_in_welcome">You are now logged in!</string>
<string name="welcome">Welcome</string> <string name="welcome">Welcome</string>
<string name="cancel">Cancel</string> <string name="cancel">Cancel</string>
<string name="get_started">Get Started</string> <string name="cancel_uppercase">CANCEL</string>
<string name="get_started">GET STARTED</string>
<!-- tags --> <!-- tags -->
<string name="tagFragmentHome">tagFragmentHome</string> <string name="tagFragmentHome">tagFragmentHome</string>
@ -45,4 +48,8 @@
<string name="AEC">AEC</string> <string name="AEC">AEC</string>
<string name="acoustic_echo_cancellation">Acoustic Echo Cancellation</string> <string name="acoustic_echo_cancellation">Acoustic Echo Cancellation</string>
<string name="settings_developer">Developer</string> <string name="settings_developer">Developer</string>
<string name="log_in">LOG IN</string>
<string name="keep_me_logged_in">Keep Me Logged In</string>
<string name="take_me_in_world">No thanks, take me in-world!</string>
<string name="be_anywere">BE ANYWHERE, WITH ANYONE \nRIGHT NOW</string>
</resources> </resources>