Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.alvion.projector.activities;
- import android.app.ProgressDialog;
- import android.content.BroadcastReceiver;
- import android.content.Context;
- import android.content.Intent;
- import android.content.IntentFilter;
- import android.content.pm.PackageInfo;
- import android.content.pm.PackageManager;
- import android.content.pm.Signature;
- import android.net.ConnectivityManager;
- import android.os.Bundle;
- import android.support.v7.app.AppCompatActivity;
- import android.text.method.LinkMovementMethod;
- import android.util.Base64;
- import android.util.Log;
- import android.view.View;
- import android.view.WindowManager;
- import android.widget.Button;
- import android.widget.TextView;
- import com.alvion.projector.R;
- import com.alvion.projector.events.client.ClientAuthEvent;
- import com.alvion.projector.events.client.ClientSignUpEvent;
- import com.alvion.projector.gcm.GCMHelper;
- import com.alvion.projector.gcm.ProjectorGCMListenerService;
- import com.alvion.projector.network.NetworkUtil;
- import com.alvion.projector.network.sockets.WS;
- import com.alvion.projector.utils.Helper;
- import com.alvion.projector.utils.UserDataHelper;
- import com.alvion.projector.utils.VKHelper;
- import com.orhanobut.logger.Logger;
- import com.vk.sdk.VKAccessToken;
- import com.vk.sdk.VKCallback;
- import com.vk.sdk.VKScope;
- import com.vk.sdk.VKSdk;
- import com.vk.sdk.api.VKApiConst;
- import com.vk.sdk.api.VKError;
- import com.vk.sdk.api.VKParameters;
- import com.vk.sdk.api.VKRequest;
- import com.vk.sdk.api.VKResponse;
- import com.vk.sdk.util.VKUtil;
- import org.json.JSONArray;
- import org.json.JSONException;
- import org.json.JSONObject;
- import java.security.MessageDigest;
- import java.security.NoSuchAlgorithmException;
- import java.util.ArrayList;
- import butterknife.Bind;
- import butterknife.ButterKnife;
- import butterknife.OnClick;
- /**
- * Represent an activity, where user can register via VK at first time. On next time login will be automatic.
- */
- public class LoginActivity extends AppCompatActivity {
- private static final String SIGN_UP = "signUp";
- private static final String AUTH = "auth";
- @Bind(R.id.btnLogin) Button btnLogin;
- @Bind(R.id.tvTerms) TextView tvTerms;
- @Bind(R.id.tvIAgree) TextView tvIAgree;
- /**
- * Interface, required to handle API responses
- */
- WS.IOnGetMessage onMessageListener;
- private ArrayList<String> onHoldMessages = new ArrayList<>();
- /**
- * VK permissions needed for the app
- */
- private static final String[] sMyScope = new String[]{
- VKScope.STATUS,
- VKScope.WALL,
- VKScope.MESSAGES
- };
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_login);
- getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
- WindowManager.LayoutParams.FLAG_FULLSCREEN);
- ButterKnife.bind(this);
- // Logger.e("FINGERPRINT: " + VKUtil.getCertificateFingerprint(this, this.getPackageName())[0]);
- WS.isConnectedToInternet = Helper.isInternetOn(this);
- onMessageListener = new WS.IOnGetMessage() {
- @Override
- public void onMessage(String message) {
- try {
- JSONObject signUpObj = new JSONObject(message);
- final String event = signUpObj.getString("event");
- Logger.e("GOT EVENT "+message);
- final int result = new JSONObject(new JSONObject(message).getString("body")).getInt("result");
- if(result != 1){
- return;
- }
- switch(event) {
- case SIGN_UP:
- UserDataHelper.saveUserData(LoginActivity.this, signUpObj.getString("body"));
- break;
- case AUTH:
- Intent intent = new Intent(LoginActivity.this, FeedActivity.class);
- int gcmType = getIntent().getIntExtra(ProjectorGCMListenerService.GCM_TYPE, -1);
- if(gcmType != -1){
- Logger.e("LOGIN GCM TYPE " + gcmType);
- intent.putExtra(ProjectorGCMListenerService.GCM_TYPE, gcmType);
- }
- startActivity(intent);
- finish();
- break;
- }
- } catch(Exception e) {
- e.printStackTrace();
- }
- }
- /**
- * When successfully connected to server - send all on hold messages
- */
- @Override
- public void onConnect() {
- for(String msg : onHoldMessages){
- WS.client.send(msg);
- }
- // initAuth();
- }
- };
- WS.observers.add(onMessageListener);
- registerReceivers();
- tvTerms.setMovementMethod(LinkMovementMethod.getInstance());
- initAuth();
- }
- private void reconnect() {
- WS.initWSClient();
- }
- private void registerReceivers() {
- inetConnectionReceiver = new BroadcastReceiver() {
- @Override
- public void onReceive(Context context, Intent intent) {
- int connStatus = NetworkUtil.getConnectivityStatus(context);
- if (connStatus == NetworkUtil.TYPE_WIFI || connStatus == NetworkUtil.TYPE_MOBILE) {
- if (isDisconnected) {
- WS.isConnectedToInternet = true;
- reconnect();
- isDisconnected = false;
- }
- } else if (connStatus == NetworkUtil.TYPE_NOT_CONNECTED) {
- isDisconnected = true;
- WS.isConnectedToInternet = false;
- }
- }
- };
- registerReceiver(inetConnectionReceiver,
- new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
- }
- private boolean isDisconnected = false;
- BroadcastReceiver inetConnectionReceiver;
- @Override
- protected void onResume() {
- super.onResume();
- }
- private void initAuth(){
- Logger.e("TOKEN "+ (UserDataHelper.getSecureToken(LoginActivity.this) != null));
- if(UserDataHelper.getSecureToken(LoginActivity.this) != null) {
- if(WS.client.isConnected()){
- WS.client.send(ClientAuthEvent.getAuthQuery(getBaseContext()));
- }else{
- onHoldMessages.add(ClientAuthEvent.getAuthQuery(getBaseContext()));
- }
- }else {
- btnLogin.setVisibility(View.VISIBLE);
- tvTerms.setVisibility(View.VISIBLE);
- tvIAgree.setVisibility(View.VISIBLE);
- }
- }
- @Override
- protected void onDestroy() {
- super.onDestroy();
- WS.observers.remove(onMessageListener);
- unregisterReceiver(inetConnectionReceiver);
- }
- @OnClick(R.id.btnLogin)
- public void login() {
- setupVisibility(true);
- VKSdk.login(this, sMyScope);
- }
- @Override
- protected void onActivityResult(int requestCode, int resultCode, Intent data) {
- if (!VKSdk.onActivityResult(requestCode, resultCode, data, new VKCallback<VKAccessToken>() {
- @Override
- public void onResult(VKAccessToken res) {
- // User has successfully registered
- Logger.d("ON VK SUCCESS");
- setupVisibility(true);
- VKHelper.saveToken(LoginActivity.this, res.accessToken);
- saveUserInfo();
- }
- @Override
- public void onError(VKError error) {
- Logger.d("on ERROR VK "+error.errorReason);
- setupVisibility(false);
- }
- })) {
- super.onActivityResult(requestCode, resultCode, data);
- }
- }
- /**
- * Make a VK Request to get user data (name, avatar url, etc) and save it to preferences
- */
- private void saveUserInfo() {
- VKParameters params = new VKParameters();
- params.put(VKApiConst.FIELDS, "id, first_name, last_name, photo_200_orig");
- VKRequest request = new VKRequest("users.get", params);
- request.executeWithListener(new VKRequest.VKRequestListener() {
- @Override
- public void onComplete(VKResponse response) {
- super.onComplete(response);
- JSONArray jsonArray;
- try {
- jsonArray = response.json.getJSONArray("response");
- JSONObject userObject = jsonArray.getJSONObject(0);
- final String firstName = userObject.getString("first_name");
- final String lastName = userObject.getString("last_name");
- final String id = userObject.getString("id");
- final String photoUrl = userObject.getString("photo_200_orig");
- VKHelper.saveUserId(LoginActivity.this, id);
- VKHelper.saveFirstName(LoginActivity.this, firstName);
- VKHelper.saveLastName(LoginActivity.this, lastName);
- VKHelper.savePhotoUrl(LoginActivity.this, photoUrl);
- Logger.d("ON COMPLETED");
- if(WS.client.isConnected()){
- Logger.d("ON COMPLETED signUp");
- WS.client.send(ClientSignUpEvent.getSignUpQuery(getBaseContext()));
- }else{
- onHoldMessages.add(ClientSignUpEvent.getSignUpQuery(getBaseContext()));
- }
- } catch (JSONException e) {
- e.printStackTrace();
- }
- }
- @Override
- public void onError(VKError error) {
- super.onError(error);
- }
- });
- }
- /**
- *
- * @param token If token is empty (false), then show login button
- */
- private void setupVisibility(boolean token){
- if(token) {
- btnLogin.setVisibility(View.GONE);
- tvTerms.setVisibility(View.GONE);
- tvIAgree.setVisibility(View.GONE);
- } else {
- btnLogin.setVisibility(View.VISIBLE);
- tvTerms.setVisibility(View.VISIBLE);
- tvIAgree.setVisibility(View.VISIBLE);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement