/* * Copyright (C) 2014 Eric Butler * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.tapchatapp.android.app.activity; import android.app.AlertDialog; import android.content.SharedPreferences; import android.net.Uri; import android.os.Bundle; import android.text.Html; import android.text.method.PasswordTransformationMethod; import android.view.MenuItem; import android.view.View; import android.widget.ArrayAdapter; import android.widget.AutoCompleteTextView; import android.widget.Button; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.EditText; import android.widget.TextView; import com.google.common.collect.ImmutableList; import com.tapchatapp.android.R; import com.tapchatapp.android.app.TapchatAnalytics; import com.tapchatapp.android.app.TapchatApp; import com.tapchatapp.android.client.TapchatAPI; import com.tapchatapp.android.client.TapchatSession; import com.tapchatapp.android.util.FieldValidator; import javax.inject.Inject; import butterknife.ButterKnife; import butterknife.InjectView; import retrofit.Callback; import retrofit.RetrofitError; import retrofit.client.Response; public class LoginActivity extends TapchatActivity implements CompoundButton.OnCheckedChangeListener, View.OnClickListener { private static final int DEFAULT_PORT = 8067; private static final ImmutableList<String> SERVERS = ImmutableList.of("irccloud.com:443"); @Inject TapchatAPI mAPI; @Inject TapchatAnalytics mAnalytics; @Inject TapchatSession mSession; @InjectView(R.id.login) Button mLoginButton; @InjectView(R.id.username) EditText mUsernameEditText; @InjectView(R.id.password) EditText mPasswordEditText; @InjectView(R.id.server) AutoCompleteTextView mServerEditText; @InjectView(R.id.show_password) CheckBox mShowPasswordCheckBox; @InjectView(R.id.tapchat_server_instructions) TextView mInstructionsTextView; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getActionBar().setDisplayHomeAsUpEnabled(true); setContentView(R.layout.activity_login); ButterKnife.inject(this); mShowPasswordCheckBox.setOnCheckedChangeListener(this); mInstructionsTextView.setText(Html.fromHtml(getString(R.string.tapchat_server_instructions))); mLoginButton.setOnClickListener(this); ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_dropdown_item_1line, SERVERS); mServerEditText.setAdapter(adapter); } @Override public void onClick(View view) { if (view == mLoginButton) { if (!FieldValidator.validateFields(this, R.id.server, R.id.username, R.id.password)) { return; } final String email = mUsernameEditText.getText().toString(); final String password = mPasswordEditText.getText().toString(); final Uri baseUri = getBaseUri(); mSession.setUri(baseUri); mAPI.login(new TapchatAPI.LoginBody(email, password), new Callback<TapchatAPI.LoginResult>() { @Override public void success(TapchatAPI.LoginResult loginResult, Response response) { String sessionId = loginResult.session; SharedPreferences.Editor editor = TapchatApp.get().getPreferences().edit(); editor.putString(TapchatApp.PREF_SERVER_HOST, baseUri.getHost()); editor.putInt(TapchatApp.PREF_SERVER_PORT, baseUri.getPort()); editor.putString(TapchatApp.PREF_SESSION_ID, sessionId); editor.apply(); mAnalytics.trackEvent("Setup", "Login", "TapChat", 1L); setResult(RESULT_OK); finish(); } @Override public void failure(RetrofitError ex) { if (isFinishing()) { return; } new AlertDialog.Builder(LoginActivity.this) .setTitle(R.string.error) .setMessage(R.string.unauthorized) .setPositiveButton(android.R.string.ok, null) .show(); } }); } } @Override public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == android.R.id.home) { finish(); return true; } return false; } @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (buttonView == mShowPasswordCheckBox) { mPasswordEditText.setTransformationMethod(isChecked ? null : new PasswordTransformationMethod()); } } private Uri getBaseUri() { String hostname = mServerEditText.getText().toString(); Uri uri = Uri.parse(String.format("https://%s/chat/", hostname)); if (uri.getPort() <= 0) { uri = Uri.parse(String.format("https://%s:%s/chat/", hostname, DEFAULT_PORT)); } return uri; } }