Created
March 8, 2017 21:27
-
-
Save daniel-stoneuk/18d9d13fe539ce519420093d1768d5ce to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.danielstone.energyhive.intro; | |
import android.content.SharedPreferences; | |
import android.net.Uri; | |
import android.os.AsyncTask; | |
import android.os.Build; | |
import android.os.Bundle; | |
import android.preference.PreferenceManager; | |
import android.support.design.widget.Snackbar; | |
import android.util.Log; | |
import android.view.KeyEvent; | |
import android.view.LayoutInflater; | |
import android.view.View; | |
import android.view.ViewGroup; | |
import android.widget.Button; | |
import android.widget.EditText; | |
import android.widget.TextView; | |
import com.danielstone.energyhive.R; | |
import com.danielstone.energyhive.utilities.DemoManager; | |
import com.danielstone.energyhive.utilities.Utility; | |
import com.heinrichreimersoftware.materialintro.view.parallax.ParallaxSlideFragment; | |
import org.json.JSONException; | |
import org.json.JSONObject; | |
import java.io.IOException; | |
import okhttp3.MultipartBody; | |
import okhttp3.OkHttpClient; | |
import okhttp3.Request; | |
import okhttp3.RequestBody; | |
import okhttp3.Response; | |
public class LogInFragment extends ParallaxSlideFragment { | |
private static final String TAG = LogInFragment.class.getSimpleName(); | |
private TextView titleTextView, descriptionTextView; | |
private EditText usernameEditText, passwordEditText; | |
private Button loginButton, efergyDemoButton, energyhiveDemoButton; | |
public static final int STATE_OK = 0; | |
public static final int STATE_LOADING = 1; | |
public static final int RESULT_OK = 0; | |
public static final int RESULT_WRONG_CREDENTIALS = 1; | |
public static final int RESULT_OTHER = 2; | |
private int mState = STATE_OK; | |
private boolean loggedIn = false; | |
private boolean mKeyboardShowing = false; | |
public interface LoginCallbacks { | |
void manualButtonPressed(LogInFragment logInFragment); | |
void onLoggedIn(); | |
} | |
private class LoginTask extends AsyncTask<String, Void, String> { | |
OkHttpClient client = new OkHttpClient(); | |
String username = ""; | |
@Override | |
protected String doInBackground(String... strings) { | |
username = strings[0]; | |
final String USERNAME_PARAM = "username"; | |
final String PASSWORD_PARAM = "password"; | |
final String SERVICE_PARAM = "service"; | |
final String DEVICE_PARAM = "device"; | |
String device = "Monitor App - " + getDeviceName(); | |
final String LOGIN_BASE_URL = getActivity().getString(R.string.api_gettoken_base_url); | |
Uri builtUri = Uri.parse(LOGIN_BASE_URL); | |
Log.i(TAG, "doInBackground: builtUri: " + builtUri); | |
RequestBody requestBody = new MultipartBody.Builder() | |
.setType(MultipartBody.FORM) | |
.addFormDataPart(USERNAME_PARAM, strings[0]) | |
.addFormDataPart(PASSWORD_PARAM, strings[1]) | |
.addFormDataPart(SERVICE_PARAM, "Monitor") | |
.addFormDataPart(DEVICE_PARAM, device) | |
.build(); | |
Request request = new Request.Builder() | |
.url(builtUri.toString()) | |
.post(requestBody) | |
.build(); | |
Response response; | |
String responseString = ""; | |
try { | |
response = client.newCall(request).execute(); | |
responseString = response.body().string(); | |
} catch (IOException e) { | |
e.printStackTrace(); | |
responseString = "error"; | |
} | |
return responseString; | |
} | |
@Override | |
protected void onPostExecute(String responseString) { | |
mState = STATE_OK; | |
if (getActivity() != null) { | |
int resultCode = RESULT_OTHER; | |
if (!responseString.equals("error")) { | |
try { | |
final String STATUS = "status"; | |
final String TOKEN = "token"; | |
final String DESC = "desc"; | |
JSONObject result = new JSONObject(responseString); | |
if (result.getString(STATUS).equals("ok")) { | |
String appToken = result.getString(TOKEN); | |
Log.i(TAG, "" + appToken); | |
setToken(appToken, DemoManager.DEMO_OFF, username); | |
resultCode = RESULT_OK; | |
} else { | |
if (result.getString(DESC).equals("Invalid credentials")) { | |
resultCode = RESULT_WRONG_CREDENTIALS; | |
} | |
} | |
} catch (JSONException e) { | |
e.printStackTrace(); | |
} | |
} | |
switch (resultCode) { | |
case RESULT_OK: { | |
loginButton.setText(R.string.intro_login_signed_in); | |
loggedIn = true; | |
updateNavigation(); | |
((LoginCallbacks) getActivity()).onLoggedIn(); | |
return; | |
} | |
case RESULT_WRONG_CREDENTIALS: { | |
makeErrorSnackbar(getContext().getString(R.string.intro_login_credentials)); | |
break; | |
} | |
case RESULT_OTHER: { | |
if (Utility.isNetworkAvailable(getContext())) { | |
makeErrorSnackbar(getContext().getString(R.string.intro_login_failed)); | |
} else { | |
makeErrorSnackbar(getContext().getString(R.string.intro_login_no_connection)); | |
} | |
break; | |
} | |
} | |
loginButton.setEnabled(true); | |
usernameEditText.setEnabled(true); | |
passwordEditText.setEnabled(true); | |
loginButton.setText(R.string.intro_login_button); | |
} | |
} | |
private void makeErrorSnackbar(String message) { | |
if (getActivity() != null) { | |
View contentView = getActivity().findViewById(android.R.id.content); | |
if (contentView != null) | |
Snackbar.make(contentView, message, | |
Snackbar.LENGTH_LONG) | |
.setAction(R.string.intro_login_manually_set_apptoken, new View.OnClickListener() { | |
@Override | |
public void onClick(View view) { | |
((LoginCallbacks) getActivity()).manualButtonPressed(LogInFragment.this); | |
} | |
}).show(); | |
} | |
} | |
} | |
public LogInFragment() { | |
// Required empty public constructor | |
} | |
public static LogInFragment newInstance() { | |
return new LogInFragment(); | |
} | |
@Override | |
public View onCreateView(LayoutInflater inflater, ViewGroup container, | |
Bundle savedInstanceState) { | |
// Inflate the layout for this fragment | |
View root = inflater.inflate(R.layout.intro_slide_login, container, false); | |
titleTextView = (TextView) root.findViewById(R.id.app_intro_login_title); | |
descriptionTextView = (TextView) root.findViewById(R.id.app_intro_login_description); | |
loginButton = (Button) root.findViewById(R.id.app_intro_login_button); | |
usernameEditText = (EditText) root.findViewById(R.id.app_intro_login_username); | |
passwordEditText = (EditText) root.findViewById(R.id.app_intro_login_password); | |
String oldUsername = PreferenceManager.getDefaultSharedPreferences(getActivity()).getString(getString(R.string.pref_key_username),""); | |
usernameEditText.setText((oldUsername.equals("Demo Mode") ? "" : oldUsername)); | |
passwordEditText.setOnKeyListener(new View.OnKeyListener() { | |
public boolean onKey(View v, int keyCode, KeyEvent event) { | |
// If the event is a key-down event on the "enter" button | |
if ((event.getAction() == KeyEvent.ACTION_DOWN) && | |
(keyCode == KeyEvent.KEYCODE_ENTER)) { | |
// Perform action on key press | |
signIn(DemoManager.DEMO_OFF); | |
return true; | |
} | |
return false; | |
} | |
}); | |
efergyDemoButton = (Button) root.findViewById(R.id.demo_button_efergy); | |
efergyDemoButton.setOnClickListener(new View.OnClickListener() { | |
@Override | |
public void onClick(View v) { | |
Log.d(TAG, "onClick: onClickListener demo mode"); | |
signIn(DemoManager.DEMO_EFERGY); | |
} | |
}); | |
energyhiveDemoButton = (Button) root.findViewById(R.id.demo_button_energyhive); | |
energyhiveDemoButton.setOnClickListener(new View.OnClickListener() { | |
@Override | |
public void onClick(View v) { | |
Log.d(TAG, "onClick: onClickListener demo mode"); | |
signIn(DemoManager.DEMO_ENERGYHIVE); | |
} | |
}); | |
loginButton.setOnClickListener(new View.OnClickListener() { | |
@Override | |
public void onClick(View v) { | |
signIn(DemoManager.DEMO_OFF); | |
} | |
}); | |
return root; | |
} | |
private void setToken(String token, int demo, String username) { | |
if (demo != DemoManager.DEMO_OFF) { | |
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getActivity()); | |
SharedPreferences.Editor editor = sharedPreferences.edit(); | |
editor.putInt(getString(R.string.pref_key_demo), demo); | |
editor.putString(getString(R.string.pref_key_appkey), getString(R.string.demo_mode_apptoken)); | |
editor.putString(getString(R.string.pref_key_username), username); | |
editor.apply(); | |
} else { | |
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getActivity()); | |
SharedPreferences.Editor editor = sharedPreferences.edit(); | |
editor.putString(getString(R.string.pref_key_appkey), token); | |
editor.putString(getString(R.string.pref_key_username), username); | |
editor.apply(); | |
} | |
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1) { | |
Utility.clearAppShortcuts(getActivity()); | |
} | |
} | |
public void signIn(int demo) { | |
if (mState != STATE_LOADING) { | |
mState = STATE_LOADING; | |
usernameEditText.setEnabled(false); | |
passwordEditText.setEnabled(false); | |
loginButton.setEnabled(false); | |
if (demo == DemoManager.DEMO_OFF) { | |
loginButton.setText(R.string.capital_l_loading); | |
String username = usernameEditText.getText().toString(); | |
String password = passwordEditText.getText().toString(); | |
LoginTask loginTask = new LoginTask(); | |
loginTask.execute(username, password); | |
} else { | |
setToken("", demo, "Demo Mode"); | |
loginButton.setText(R.string.intro_login_demo_mode); | |
View contentView = getActivity().findViewById(android.R.id.content); | |
Snackbar.make(contentView, R.string.intro_login_demo_mode_selected, | |
Snackbar.LENGTH_LONG).show(); | |
loggedIn = true; | |
updateNavigation(); | |
((LoginCallbacks) getActivity()).onLoggedIn(); | |
} | |
} | |
} | |
@Override | |
public void onDestroy() { | |
super.onDestroy(); | |
} | |
@Override | |
public boolean canGoForward() { | |
return loggedIn; | |
} | |
public String getDeviceName() { | |
String manufacturer = Build.MANUFACTURER; | |
String model = Build.MODEL; | |
if (model.startsWith(manufacturer)) { | |
return capitalize(model); | |
} else { | |
return capitalize(manufacturer) + " " + model; | |
} | |
} | |
private String capitalize(String s) { | |
if (s == null || s.length() == 0) { | |
return ""; | |
} | |
char first = s.charAt(0); | |
if (Character.isUpperCase(first)) { | |
return s; | |
} else { | |
return Character.toUpperCase(first) + s.substring(1); | |
} | |
} | |
public void setKeyboardShowing(boolean keyboardShowing) { | |
mKeyboardShowing = keyboardShowing; | |
Log.i(TAG, "setKeyboardShowing: " + keyboardShowing); | |
if (mKeyboardShowing) { | |
titleTextView.setVisibility(View.GONE); | |
descriptionTextView.setVisibility(View.GONE); | |
} else { | |
if (titleTextView.getVisibility() != View.VISIBLE) { | |
titleTextView.setAlpha(0f); | |
titleTextView.setVisibility(View.VISIBLE); | |
titleTextView.animate().alpha(1f).setDuration(500); | |
} else titleTextView.setVisibility(View.VISIBLE); | |
if (descriptionTextView.getVisibility() != View.VISIBLE) { | |
descriptionTextView.setAlpha(0f); | |
descriptionTextView.setVisibility(View.VISIBLE); | |
descriptionTextView.animate().alpha(1f).setDuration(500); | |
} else descriptionTextView.setVisibility(View.VISIBLE); | |
} | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.danielstone.energyhive.intro; | |
import android.content.Intent; | |
import android.content.SharedPreferences; | |
import android.os.Bundle; | |
import android.preference.PreferenceManager; | |
import android.support.design.widget.Snackbar; | |
import android.util.Log; | |
import android.view.View; | |
import android.view.ViewTreeObserver; | |
import com.danielstone.energyhive.R; | |
import com.danielstone.energyhive.utilities.DemoManager; | |
import com.danielstone.energyhive.utilities.Utility; | |
import com.heinrichreimersoftware.materialintro.app.OnNavigationBlockedListener; | |
import com.heinrichreimersoftware.materialintro.slide.FragmentSlide; | |
import com.heinrichreimersoftware.materialintro.slide.SimpleSlide; | |
public class MainIntroActivity extends com.heinrichreimersoftware.materialintro.app.IntroActivity implements LogInFragment.LoginCallbacks, AppTokenFragment.AppTokenCallbacks { | |
private boolean manualMode = false; | |
private final static String TAG = MainIntroActivity.class.getSimpleName(); | |
@Override | |
protected void onCreate(Bundle savedInstanceState) { | |
super.onCreate(savedInstanceState); | |
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this); | |
manualMode = sharedPreferences.getBoolean(getString(R.string.pref_key_manual_apptoken), Boolean.parseBoolean(getString(R.string.pref_default_manual_apptoken))); | |
/** | |
* Standard slide (like Google's intros) | |
*/ | |
addSlide(new SimpleSlide.Builder() | |
.title(R.string.intro_title_1) | |
.description(R.string.intro_description_1) | |
.image(R.drawable.intro_icon) | |
.background(R.color.color_intro_one) | |
.backgroundDark(R.color.color_intro_one_dark) | |
.layout(R.layout.slide_intro) | |
.build()); | |
if (manualMode) { | |
addSlide(new FragmentSlide.Builder() | |
.background(R.color.color_intro_three) | |
.backgroundDark(R.color.color_intro_three_dark) | |
.fragment(AppTokenFragment.newInstance(manualMode)) | |
.build()); | |
} else { | |
addSlide(new FragmentSlide.Builder() | |
.background(R.color.color_intro_login) | |
.backgroundDark(R.color.color_intro_login_dark) | |
.fragment(LogInFragment.newInstance()) | |
.build()); | |
} | |
addSlide(new SimpleSlide.Builder() | |
.title(R.string.intro_signed_in_title) | |
.description(R.string.intro_signed_in_description) | |
.image(R.drawable.ic_verified_user_white_48px) | |
.background(R.color.colorPrimary) | |
.backgroundDark(R.color.colorPrimaryDark) | |
.layout(R.layout.slide_intro) | |
.build()); | |
addOnNavigationBlockedListener(new OnNavigationBlockedListener() { | |
@Override | |
public void onNavigationBlocked(int position, int direction) { | |
View contentView = findViewById(android.R.id.content); | |
if (contentView != null) { | |
if (manualMode) { | |
Snackbar.make(contentView, (position == 1) ? | |
getString(R.string.enter_apptoken_error) : getString(R.string.somethings_wrong), | |
Snackbar.LENGTH_LONG).show(); | |
} else if (!manualMode) | |
if (getSlide(1).getFragment() != null) | |
((LogInFragment) getSlide(1).getFragment()).signIn(DemoManager.DEMO_OFF); | |
} | |
} | |
}); | |
final View activityRootView = findViewById(android.R.id.content); | |
activityRootView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { | |
@Override | |
public void onGlobalLayout() { | |
int heightDiff = activityRootView.getRootView().getHeight() - activityRootView.getHeight(); | |
if (!manualMode && getSlide(1).getFragment() != null) { | |
if (getSlide(1).getFragment() instanceof LogInFragment) { | |
LogInFragment logInFragment = (LogInFragment) getSlide(1).getFragment(); | |
if (heightDiff > Utility.dpToPx(MainIntroActivity.this, 200)) { // if more than 200 dp, it's probably a keyboard... | |
logInFragment.setKeyboardShowing(true); | |
} else { | |
logInFragment.setKeyboardShowing(false); | |
} | |
} | |
} | |
} | |
}); | |
} | |
@Override | |
public void onBackPressed() { | |
Intent startMain = new Intent(Intent.ACTION_MAIN); | |
startMain.addCategory(Intent.CATEGORY_HOME); | |
startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); | |
startActivity(startMain); | |
} | |
// @Override | |
// public void manualButtonPressed(TutorialFragment tutorialFragment) { | |
// Log.d(TAG, "manualButtonPressed: "); | |
// if (!manualMode) { | |
// SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this); | |
// SharedPreferences.Editor editor = sharedPreferences.edit(); | |
// editor.putBoolean(getString(R.string.pref_key_manual_apptoken), true); | |
// editor.apply(); | |
// | |
// finish(); | |
// } | |
// } | |
@Override | |
public void automaticButtonPressed(AppTokenFragment appTokenFragment) { | |
Log.d(TAG, "automaticButtonPressed: "); | |
Log.d(TAG, "manualButtonPressed: "); | |
if (manualMode) { | |
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this); | |
SharedPreferences.Editor editor = sharedPreferences.edit(); | |
editor.putBoolean(getString(R.string.pref_key_manual_apptoken), false); | |
editor.apply(); | |
finish(); | |
} | |
} | |
@Override | |
public void manualButtonPressed(LogInFragment logInFragment) { | |
Log.d(TAG, "manualButtonPressed: "); | |
if (!manualMode) { | |
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this); | |
SharedPreferences.Editor editor = sharedPreferences.edit(); | |
editor.putBoolean(getString(R.string.pref_key_manual_apptoken), true); | |
editor.apply(); | |
finish(); | |
} | |
} | |
@Override | |
public void onLoggedIn() { | |
Log.i(TAG, "onLoggedIn: "); | |
nextSlide(); | |
} | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment