Android Open Source - antigravity Login Activity






From Project

Back to project page antigravity.

License

The source code is released under:

GNU General Public License

If you think the Android project antigravity listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package com.floatboth.antigravity.ui;
// w  ww  .jav a  2s.c om
import java.util.List;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.BroadcastReceiver;
import android.content.pm.ResolveInfo;
import android.os.Bundle;
import android.view.Window;
import android.view.View;
import android.view.KeyEvent;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
import android.widget.TextView;
import android.widget.EditText;
import android.net.Uri;
import android.text.Html;
import android.text.method.LinkMovementMethod;
import net.app.adnlogin.ADNPassportUtility;
import com.octo.android.robospice.persistence.exception.SpiceException;
import com.octo.android.robospice.request.listener.RequestListener;
import org.androidannotations.annotations.*;
import org.androidannotations.annotations.sharedpreferences.*;
import org.androidannotations.annotations.res.StringRes;

import com.floatboth.antigravity.*;
import com.floatboth.antigravity.data.*;
import com.floatboth.antigravity.net.*;

@EActivity(R.layout.login_activity)
public class LoginActivity extends BaseActivity {
  @StringRes String empty_field;
  @StringRes String username_hint;
  @StringRes String password_hint;
  @StringRes String must_not_be_empty;
  @StringRes String adn_info_text;
  @StringRes String client_id;
  @StringRes String password_secret;
  @StringRes String login_progress;

  @SystemService InputMethodManager inputMethodManager;
  @Pref ADNPrefs_ adnPrefs;
  @ViewById EditText username_field;
  @ViewById EditText password_field;
  @ViewById Button login_with_passport;
  @ViewById Button install_passport;
  @ViewById TextView adn_info;
  @ViewById TextView or_label;
  ProgressDialog loginProgress;

  private static final int REQUEST_CODE_AUTHORIZE = 1;
  private static final String AUTHORIZE_ACTION = "net.app.adnpassport.authorize";
  private static final String SCOPES = "basic,write_post,files";

  // Event listeners

  public void onLoginSuccess(String token) {
    adnPrefs.accessToken().put(token);
    MainActivity_.intent(this).flags(Intent.FLAG_ACTIVITY_CLEAR_TOP).start();
    finish();
  }

  @OnActivityResult(REQUEST_CODE_AUTHORIZE)
  public void onLoginWithPassportSuccess(int resultCode, Intent data) {
    if (resultCode == 1) onLoginSuccess(data.getStringExtra("accessToken"));
  }

  private final BroadcastReceiver passportInstallReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
      if (Intent.ACTION_PACKAGE_ADDED.equals(intent.getAction()) &&
          intent.getDataString().equals(String.format("package:%s", ADNPassportUtility.APP_PACKAGE)))
        loginWithPassport();
    }
  };

  // UI helpers

  public void showError(String title, String message) {
    new AlertDialog.Builder(this).setTitle(title).setMessage(message)
      .setPositiveButton(R.string.ok, null).show();
  }

  public void showPasswordADNError(ADNAuthError ex) {
    showError(ex.title, ex.text);
  }

  public void showUnknownError(Throwable ex) {
    showError("Unknown error", ex.getMessage());
  }

  // Lifecycle

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    getTintManager().setStatusBarTintResource(R.color.accent_ag);
    getTintManager().setNavigationBarTintResource(R.color.accent_ag);
    IntentFilter filter = new IntentFilter(Intent.ACTION_PACKAGE_ADDED);
    filter.addDataScheme("package");
    registerReceiver(passportInstallReceiver, filter);
  }

  @AfterViews
  public void setUpViews() {
    password_field.setOnEditorActionListener(new TextView.OnEditorActionListener() {
      @Override
      public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
        if (actionId == EditorInfo.IME_ACTION_GO) {
          loginWithPassword();
        }
        return false;
      }
    });
    adn_info.setText(Html.fromHtml(adn_info_text));
    adn_info.setMovementMethod(LinkMovementMethod.getInstance());
    if (ADNPassportUtility.isPassportAuthorizationAvailable(this)) {
      login_with_passport.setVisibility(View.VISIBLE);
    } else if (hasMarketInstalled()) {
      install_passport.setVisibility(View.VISIBLE);
    } else {
      or_label.setVisibility(View.GONE);
    }
  }

  @Override
  public void onDestroy() {
    super.onDestroy();
    unregisterReceiver(passportInstallReceiver);
  }

  // Actions

  @Click(R.id.install_passport)
  public void installPassport() {
    ADNPassportUtility.launchPassportInstallation(this);
  }

  @Click(R.id.login_with_passport)
  public void loginWithPassport() {
    Intent i = ADNPassportUtility.getAuthorizationIntent(client_id, SCOPES);
    startActivityForResult(i, REQUEST_CODE_AUTHORIZE);
  }

  @Click(R.id.login_with_password)
  public void loginWithPassword() {
    String username = username_field.getText().toString().trim();
    String password = password_field.getText().toString();
    if (username.matches("")) {
      showError(empty_field, username_hint + " " + must_not_be_empty);
    } else if (password.matches("")) {
      showError(empty_field, password_hint + " " + must_not_be_empty);
    } else {
      inputMethodManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
      loginProgress = ProgressDialog.show(this, null, login_progress, true, false);
      getSpiceManager().execute(new LoginRequest(client_id, password_secret, username, password, SCOPES),
          new LoginListener());
    }
  }

  public class LoginListener implements RequestListener<String> {
    @Override
    public void onRequestFailure(SpiceException spiceException) {
      loginProgress.dismiss();
      spiceException.printStackTrace();
      try {
        throw spiceException.getCause();
      } catch (ADNAuthError ex) {
        showPasswordADNError(ex);
      } catch (Throwable ex) {
        showUnknownError(ex);
      }
    }

    @Override
    public void onRequestSuccess(final String token) {
      loginProgress.dismiss();
      onLoginSuccess(token);
    }
  }

  // http://www.thiagorosa.com.br/how-to/check-if-market-is-installed
  public boolean hasMarketInstalled() {
    Intent market = new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=dummy"));
    List<ResolveInfo> list = getPackageManager().queryIntentActivities(market, 0);
    if (list != null && list.size() > 0)
      for (int i = 0; i < list.size(); i++)
        if (list.get(i).activityInfo.packageName.startsWith("com.android.vending") == true)
          return true;
    return false;
  }
}




Java Source Code List

com.floatboth.antigravity.ADNPrefs.java
com.floatboth.antigravity.AntigravityApplication.java
com.floatboth.antigravity.CanHasCamera.java
com.floatboth.antigravity.DataCache.java
com.floatboth.antigravity.data.ADNAuthError.java
com.floatboth.antigravity.data.ADNAuthResponse.java
com.floatboth.antigravity.data.ADNMeta.java
com.floatboth.antigravity.data.ADNResponse.java
com.floatboth.antigravity.data.Annotation.java
com.floatboth.antigravity.data.Configuration.java
com.floatboth.antigravity.data.DerivedFiles.java
com.floatboth.antigravity.data.Entities.java
com.floatboth.antigravity.data.Entity.java
com.floatboth.antigravity.data.FileAnnotationReplacementValueWrapper.java
com.floatboth.antigravity.data.FileAnnotationReplacementValue.java
com.floatboth.antigravity.data.File.java
com.floatboth.antigravity.data.LinkEntity.java
com.floatboth.antigravity.data.PostConfiguration.java
com.floatboth.antigravity.data.Post.java
com.floatboth.antigravity.data.SupportAnnotationValue.java
com.floatboth.antigravity.data.Thumbnail.java
com.floatboth.antigravity.data.TypedContent.java
com.floatboth.antigravity.net.ADNClient.java
com.floatboth.antigravity.net.ADNSpiceService.java
com.floatboth.antigravity.net.ConfigurationRequest.java
com.floatboth.antigravity.net.CreatePostRequest.java
com.floatboth.antigravity.net.DeleteFileRequest.java
com.floatboth.antigravity.net.LoginRequest.java
com.floatboth.antigravity.net.MyFilesRequest.java
com.floatboth.antigravity.net.UpdateFileRequest.java
com.floatboth.antigravity.net.UploadFileRequest.java
com.floatboth.antigravity.post.LinkPostFactory.java
com.floatboth.antigravity.post.OembedPostFactory.java
com.floatboth.antigravity.post.PlainPostFactory.java
com.floatboth.antigravity.post.PostFactory.java
com.floatboth.antigravity.post.SupportPostFactory.java
com.floatboth.antigravity.ui.AboutActivity.java
com.floatboth.antigravity.ui.BaseActivity.java
com.floatboth.antigravity.ui.FileActivity.java
com.floatboth.antigravity.ui.FileDescriptionHelper.java
com.floatboth.antigravity.ui.FileListAdapter.java
com.floatboth.antigravity.ui.FileListFragment.java
com.floatboth.antigravity.ui.LicenseActivity.java
com.floatboth.antigravity.ui.LoginActivity.java
com.floatboth.antigravity.ui.MainActivity.java
com.floatboth.antigravity.ui.PostActivity.java
com.floatboth.antigravity.ui.UploadActivity.java
net.app.adnlogin.ADNPassportUtility.java