Java tutorial
/* * Copyright (C) 2014 Michell Bak * * 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.miz.mizuu.fragments; import android.app.Fragment; import android.content.Intent; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.graphics.Typeface; import android.os.Bundle; import android.preference.PreferenceManager; import android.text.InputType; import android.text.TextUtils; import android.text.method.PasswordTransformationMethod; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.Button; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.CompoundButton.OnCheckedChangeListener; import android.widget.EditText; import android.widget.Toast; import com.miz.apis.trakt.Trakt; import com.miz.functions.AsyncTask; import com.miz.functions.MizLib; import com.miz.mizuu.MizuuApplication; import com.miz.mizuu.R; import com.miz.service.TraktMoviesSyncService; import com.miz.service.TraktTvShowsSyncService; import com.squareup.okhttp.Request; import com.squareup.okhttp.Response; import org.json.JSONObject; import java.io.File; import static com.miz.functions.PreferenceKeys.SYNC_WITH_TRAKT; import static com.miz.functions.PreferenceKeys.TRAKT_FULL_NAME; import static com.miz.functions.PreferenceKeys.TRAKT_PASSWORD; import static com.miz.functions.PreferenceKeys.TRAKT_USERNAME; public class AccountsFragment extends Fragment { private SharedPreferences settings; private EditText traktUser, traktPass; private Button traktLogIn, traktRemoveAccount, traktSyncNow; private CheckBox syncTrakt; private String mTraktApiKey; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); settings = PreferenceManager.getDefaultSharedPreferences(getActivity()); mTraktApiKey = Trakt.getApiKey(getActivity()); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.account_layout, container, false); } @Override public void onViewCreated(View v, Bundle savedInstanceState) { super.onViewCreated(v, savedInstanceState); traktUser = (EditText) v.findViewById(R.id.traktUsername); traktUser.setInputType(InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS); traktPass = (EditText) v.findViewById(R.id.traktPassword); traktPass.setTypeface(Typeface.DEFAULT); traktPass.setTransformationMethod(new PasswordTransformationMethod()); traktLogIn = (Button) v.findViewById(R.id.traktLogIn); traktLogIn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { new TraktLogin().execute(); } }); traktRemoveAccount = (Button) v.findViewById(R.id.traktRemoveAccount); traktRemoveAccount.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { traktRemove(); } }); traktSyncNow = (Button) v.findViewById(R.id.traktSyncNow); traktSyncNow.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { getActivity().startService(new Intent(getActivity(), TraktMoviesSyncService.class)); getActivity().startService(new Intent(getActivity(), TraktTvShowsSyncService.class)); } }); syncTrakt = (CheckBox) v.findViewById(R.id.syncTrakt); syncTrakt.setChecked(settings.getBoolean(SYNC_WITH_TRAKT, true)); syncTrakt.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { Editor editor = settings.edit(); editor.putBoolean(SYNC_WITH_TRAKT, isChecked); editor.apply(); } }); traktUser.setText(settings.getString(TRAKT_USERNAME, "")); if (TextUtils.isEmpty(settings.getString(TRAKT_PASSWORD, ""))) { traktPass.setText(""); traktUser.setEnabled(true); traktPass.setEnabled(true); traktLogIn.setVisibility(View.VISIBLE); traktSyncNow.setVisibility(View.GONE); traktRemoveAccount.setVisibility(View.GONE); syncTrakt.setVisibility(View.GONE); syncTrakt.setChecked(false); } else { traktPass.setText("password"); traktUser.setEnabled(false); traktPass.setEnabled(false); traktLogIn.setVisibility(View.GONE); traktSyncNow.setVisibility(View.VISIBLE); traktRemoveAccount.setVisibility(View.VISIBLE); syncTrakt.setVisibility(View.VISIBLE); ; } } private class TraktLogin extends AsyncTask<Void, Void, Boolean> { private String username, password; @Override protected void onPreExecute() { traktLogIn.setText(R.string.authenticating); traktLogIn.setEnabled(false); } @Override protected Boolean doInBackground(Void... params) { username = traktUser.getText().toString().trim(); password = traktPass.getText().toString().trim(); boolean success = false; try { Request request = MizLib.getTraktAuthenticationRequest( "http://api.trakt.tv/account/test/" + mTraktApiKey, username, MizLib.SHA1(password)); Response response = MizuuApplication.getOkHttpClient().newCall(request).execute(); JSONObject jObject = new JSONObject(response.body().string()); if (response.isSuccessful()) { String status = jObject.getString("status"); success = status.equals("success"); } } catch (Exception e) { success = false; } if (success) { Editor editor = settings.edit(); editor.putString(TRAKT_USERNAME, username); editor.putString(TRAKT_PASSWORD, MizLib.SHA1(password)); editor.apply(); try { Request request = MizLib.getTraktAuthenticationRequest( "http://api.trakt.tv/user/profile.json/" + mTraktApiKey + "/" + username, username, MizLib.SHA1(password)); Response response = MizuuApplication.getOkHttpClient().newCall(request).execute(); JSONObject jObject = new JSONObject(response.body().string()); if (response.isSuccessful()) { String name = jObject.getString("full_name"); if (TextUtils.isEmpty(name) || name.equals("null")) name = jObject.getString("username"); String avatar = jObject.getString("avatar"); editor.putString(TRAKT_FULL_NAME, name); editor.apply(); if (isAdded() && (avatar.contains("gravatar") || (avatar.contains("trakt") && !avatar.contains("avatar-large.jpg")))) MizLib.downloadFile(avatar, new File(MizuuApplication.getCacheFolder(getActivity()), "avatar.jpg") .getAbsolutePath()); } } catch (Exception e) { success = false; } } return success; } @Override protected void onPostExecute(Boolean success) { if (success) { if (isAdded()) { Toast.makeText(getActivity(), getString(R.string.loginSucceeded), Toast.LENGTH_LONG).show(); traktUser.setEnabled(false); traktPass.setEnabled(false); syncTrakt.setVisibility(View.VISIBLE); ; syncTrakt.setChecked(true); traktLogIn.setVisibility(View.GONE); traktSyncNow.setVisibility(View.VISIBLE); traktRemoveAccount.setVisibility(View.VISIBLE); startServices(); } } else { if (isAdded()) { Toast.makeText(getActivity(), getString(R.string.failedToLogin), Toast.LENGTH_LONG).show(); traktLogIn.setText(R.string.logIn); traktLogIn.setEnabled(true); } } } } public void traktRemove() { Editor editor = settings.edit(); editor.putString(TRAKT_USERNAME, ""); editor.putString(TRAKT_PASSWORD, ""); editor.putString(TRAKT_FULL_NAME, ""); editor.apply(); new File(MizuuApplication.getCacheFolder(getActivity()), "avatar.jpg").delete(); traktUser.setText(""); traktUser.setEnabled(true); traktPass.setText(""); traktPass.setEnabled(true); syncTrakt.setVisibility(View.GONE); syncTrakt.setChecked(false); traktLogIn.setVisibility(View.VISIBLE); traktSyncNow.setVisibility(View.GONE); traktRemoveAccount.setVisibility(View.GONE); Toast.makeText(getActivity(), getString(R.string.removedAccount), Toast.LENGTH_LONG).show(); } private void startServices() { if (isAdded() && syncTrakt.isChecked()) { Intent movies = new Intent(getActivity(), TraktMoviesSyncService.class); getActivity().startService(movies); Intent shows = new Intent(getActivity(), TraktTvShowsSyncService.class); getActivity().startService(shows); } } }