Advertisement
Guest User

Untitled

a guest
Feb 12th, 2016
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.52 KB | None | 0 0
  1. package com.alvion.projector.activities;
  2.  
  3. import android.app.ProgressDialog;
  4. import android.content.BroadcastReceiver;
  5. import android.content.Context;
  6. import android.content.Intent;
  7. import android.content.IntentFilter;
  8. import android.content.pm.PackageInfo;
  9. import android.content.pm.PackageManager;
  10. import android.content.pm.Signature;
  11. import android.net.ConnectivityManager;
  12. import android.os.Bundle;
  13. import android.support.v7.app.AppCompatActivity;
  14. import android.text.method.LinkMovementMethod;
  15. import android.util.Base64;
  16. import android.util.Log;
  17. import android.view.View;
  18. import android.view.WindowManager;
  19. import android.widget.Button;
  20. import android.widget.TextView;
  21.  
  22. import com.alvion.projector.R;
  23. import com.alvion.projector.events.client.ClientAuthEvent;
  24. import com.alvion.projector.events.client.ClientSignUpEvent;
  25. import com.alvion.projector.gcm.GCMHelper;
  26. import com.alvion.projector.gcm.ProjectorGCMListenerService;
  27. import com.alvion.projector.network.NetworkUtil;
  28. import com.alvion.projector.network.sockets.WS;
  29. import com.alvion.projector.utils.Helper;
  30. import com.alvion.projector.utils.UserDataHelper;
  31. import com.alvion.projector.utils.VKHelper;
  32. import com.orhanobut.logger.Logger;
  33. import com.vk.sdk.VKAccessToken;
  34. import com.vk.sdk.VKCallback;
  35. import com.vk.sdk.VKScope;
  36. import com.vk.sdk.VKSdk;
  37. import com.vk.sdk.api.VKApiConst;
  38. import com.vk.sdk.api.VKError;
  39. import com.vk.sdk.api.VKParameters;
  40. import com.vk.sdk.api.VKRequest;
  41. import com.vk.sdk.api.VKResponse;
  42. import com.vk.sdk.util.VKUtil;
  43.  
  44. import org.json.JSONArray;
  45. import org.json.JSONException;
  46. import org.json.JSONObject;
  47.  
  48. import java.security.MessageDigest;
  49. import java.security.NoSuchAlgorithmException;
  50. import java.util.ArrayList;
  51.  
  52. import butterknife.Bind;
  53. import butterknife.ButterKnife;
  54. import butterknife.OnClick;
  55.  
  56.  
  57. /**
  58. * Represent an activity, where user can register via VK at first time. On next time login will be automatic.
  59. */
  60.  
  61. public class LoginActivity extends AppCompatActivity {
  62.  
  63. private static final String SIGN_UP = "signUp";
  64. private static final String AUTH = "auth";
  65. @Bind(R.id.btnLogin) Button btnLogin;
  66. @Bind(R.id.tvTerms) TextView tvTerms;
  67. @Bind(R.id.tvIAgree) TextView tvIAgree;
  68. /**
  69. * Interface, required to handle API responses
  70. */
  71. WS.IOnGetMessage onMessageListener;
  72.  
  73. private ArrayList<String> onHoldMessages = new ArrayList<>();
  74.  
  75. /**
  76. * VK permissions needed for the app
  77. */
  78. private static final String[] sMyScope = new String[]{
  79. VKScope.STATUS,
  80. VKScope.WALL,
  81. VKScope.MESSAGES
  82. };
  83.  
  84. @Override
  85. protected void onCreate(Bundle savedInstanceState) {
  86. super.onCreate(savedInstanceState);
  87. setContentView(R.layout.activity_login);
  88. getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
  89. WindowManager.LayoutParams.FLAG_FULLSCREEN);
  90. ButterKnife.bind(this);
  91.  
  92. // Logger.e("FINGERPRINT: " + VKUtil.getCertificateFingerprint(this, this.getPackageName())[0]);
  93.  
  94. WS.isConnectedToInternet = Helper.isInternetOn(this);
  95.  
  96. onMessageListener = new WS.IOnGetMessage() {
  97. @Override
  98. public void onMessage(String message) {
  99. try {
  100. JSONObject signUpObj = new JSONObject(message);
  101. final String event = signUpObj.getString("event");
  102. Logger.e("GOT EVENT "+message);
  103.  
  104. final int result = new JSONObject(new JSONObject(message).getString("body")).getInt("result");
  105. if(result != 1){
  106. return;
  107. }
  108. switch(event) {
  109. case SIGN_UP:
  110. UserDataHelper.saveUserData(LoginActivity.this, signUpObj.getString("body"));
  111. break;
  112. case AUTH:
  113. Intent intent = new Intent(LoginActivity.this, FeedActivity.class);
  114. int gcmType = getIntent().getIntExtra(ProjectorGCMListenerService.GCM_TYPE, -1);
  115. if(gcmType != -1){
  116. Logger.e("LOGIN GCM TYPE " + gcmType);
  117.  
  118. intent.putExtra(ProjectorGCMListenerService.GCM_TYPE, gcmType);
  119. }
  120.  
  121. startActivity(intent);
  122. finish();
  123. break;
  124. }
  125. } catch(Exception e) {
  126. e.printStackTrace();
  127. }
  128. }
  129.  
  130. /**
  131. * When successfully connected to server - send all on hold messages
  132. */
  133. @Override
  134. public void onConnect() {
  135. for(String msg : onHoldMessages){
  136. WS.client.send(msg);
  137. }
  138. // initAuth();
  139. }
  140. };
  141. WS.observers.add(onMessageListener);
  142. registerReceivers();
  143. tvTerms.setMovementMethod(LinkMovementMethod.getInstance());
  144. initAuth();
  145.  
  146. }
  147.  
  148. private void reconnect() {
  149. WS.initWSClient();
  150. }
  151.  
  152. private void registerReceivers() {
  153. inetConnectionReceiver = new BroadcastReceiver() {
  154. @Override
  155. public void onReceive(Context context, Intent intent) {
  156. int connStatus = NetworkUtil.getConnectivityStatus(context);
  157. if (connStatus == NetworkUtil.TYPE_WIFI || connStatus == NetworkUtil.TYPE_MOBILE) {
  158. if (isDisconnected) {
  159. WS.isConnectedToInternet = true;
  160. reconnect();
  161. isDisconnected = false;
  162.  
  163. }
  164. } else if (connStatus == NetworkUtil.TYPE_NOT_CONNECTED) {
  165.  
  166. isDisconnected = true;
  167. WS.isConnectedToInternet = false;
  168. }
  169. }
  170. };
  171. registerReceiver(inetConnectionReceiver,
  172. new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
  173. }
  174. private boolean isDisconnected = false;
  175. BroadcastReceiver inetConnectionReceiver;
  176.  
  177. @Override
  178. protected void onResume() {
  179. super.onResume();
  180. }
  181.  
  182. private void initAuth(){
  183. Logger.e("TOKEN "+ (UserDataHelper.getSecureToken(LoginActivity.this) != null));
  184. if(UserDataHelper.getSecureToken(LoginActivity.this) != null) {
  185. if(WS.client.isConnected()){
  186. WS.client.send(ClientAuthEvent.getAuthQuery(getBaseContext()));
  187. }else{
  188. onHoldMessages.add(ClientAuthEvent.getAuthQuery(getBaseContext()));
  189. }
  190. }else {
  191. btnLogin.setVisibility(View.VISIBLE);
  192. tvTerms.setVisibility(View.VISIBLE);
  193. tvIAgree.setVisibility(View.VISIBLE);
  194. }
  195. }
  196.  
  197.  
  198.  
  199. @Override
  200. protected void onDestroy() {
  201. super.onDestroy();
  202. WS.observers.remove(onMessageListener);
  203. unregisterReceiver(inetConnectionReceiver);
  204. }
  205.  
  206. @OnClick(R.id.btnLogin)
  207. public void login() {
  208. setupVisibility(true);
  209.  
  210. VKSdk.login(this, sMyScope);
  211. }
  212.  
  213. @Override
  214. protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  215.  
  216. if (!VKSdk.onActivityResult(requestCode, resultCode, data, new VKCallback<VKAccessToken>() {
  217. @Override
  218. public void onResult(VKAccessToken res) {
  219. // User has successfully registered
  220. Logger.d("ON VK SUCCESS");
  221. setupVisibility(true);
  222.  
  223. VKHelper.saveToken(LoginActivity.this, res.accessToken);
  224. saveUserInfo();
  225. }
  226. @Override
  227. public void onError(VKError error) {
  228. Logger.d("on ERROR VK "+error.errorReason);
  229. setupVisibility(false);
  230.  
  231. }
  232. })) {
  233. super.onActivityResult(requestCode, resultCode, data);
  234. }
  235. }
  236.  
  237. /**
  238. * Make a VK Request to get user data (name, avatar url, etc) and save it to preferences
  239. */
  240. private void saveUserInfo() {
  241. VKParameters params = new VKParameters();
  242. params.put(VKApiConst.FIELDS, "id, first_name, last_name, photo_200_orig");
  243.  
  244. VKRequest request = new VKRequest("users.get", params);
  245. request.executeWithListener(new VKRequest.VKRequestListener() {
  246.  
  247. @Override
  248. public void onComplete(VKResponse response) {
  249. super.onComplete(response);
  250. JSONArray jsonArray;
  251.  
  252. try {
  253. jsonArray = response.json.getJSONArray("response");
  254. JSONObject userObject = jsonArray.getJSONObject(0);
  255. final String firstName = userObject.getString("first_name");
  256. final String lastName = userObject.getString("last_name");
  257. final String id = userObject.getString("id");
  258. final String photoUrl = userObject.getString("photo_200_orig");
  259.  
  260. VKHelper.saveUserId(LoginActivity.this, id);
  261. VKHelper.saveFirstName(LoginActivity.this, firstName);
  262. VKHelper.saveLastName(LoginActivity.this, lastName);
  263. VKHelper.savePhotoUrl(LoginActivity.this, photoUrl);
  264. Logger.d("ON COMPLETED");
  265.  
  266. if(WS.client.isConnected()){
  267. Logger.d("ON COMPLETED signUp");
  268.  
  269. WS.client.send(ClientSignUpEvent.getSignUpQuery(getBaseContext()));
  270. }else{
  271. onHoldMessages.add(ClientSignUpEvent.getSignUpQuery(getBaseContext()));
  272. }
  273.  
  274. } catch (JSONException e) {
  275. e.printStackTrace();
  276. }
  277. }
  278.  
  279. @Override
  280. public void onError(VKError error) {
  281. super.onError(error);
  282. }
  283. });
  284. }
  285.  
  286. /**
  287. *
  288. * @param token If token is empty (false), then show login button
  289. */
  290.  
  291. private void setupVisibility(boolean token){
  292. if(token) {
  293. btnLogin.setVisibility(View.GONE);
  294. tvTerms.setVisibility(View.GONE);
  295. tvIAgree.setVisibility(View.GONE);
  296. } else {
  297. btnLogin.setVisibility(View.VISIBLE);
  298. tvTerms.setVisibility(View.VISIBLE);
  299. tvIAgree.setVisibility(View.VISIBLE);
  300. }
  301. }
  302. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement