diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml old mode 100644 new mode 100755 index 246fba8ee..6bc92b55d --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -181,6 +181,9 @@ + { + LoginTask task = new LoginTask(); + task.setCaller(playStoreTask); + task.setContext(this); + task.prepareDialog(R.string.dialog_message_logging_in_predefined, R.string.dialog_title_logging_in); + task.execute(); + }); + EditText editPassword = findViewById(R.id.passwordg); + Button login_google = findViewById(R.id.button_okg); + login_google.setOnClickListener(view -> { + Context c = view.getContext(); + String email = editEmail.getText().toString(); + String password = editPassword.getText().toString(); + if (TextUtils.isEmpty(email) || TextUtils.isEmpty(password)) { + ContextUtil.toast(c.getApplicationContext(), R.string.error_credentials_empty); + return; + } + getUserCredentialsTask().execute(email, password); + }); + ImageView toggle_password = findViewById(R.id.toggle_password_visibility); + toggle_password.setOnClickListener(v -> { + boolean passwordVisible = !TextUtils.isEmpty((String) v.getTag()); + v.setTag(passwordVisible ? null : "tag"); + ((ImageView) v).setImageResource(passwordVisible ? R.drawable.ic_visibility_on : R.drawable.ic_visibility_off); + editPassword.setInputType(passwordVisible ? InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD : InputType.TYPE_CLASS_TEXT); + }); + } + + private UserProvidedCredentialsTask getUserCredentialsTask() { + UserProvidedCredentialsTask task = new UserProvidedCredentialsTask(); + task.setCaller(playStoreTask); + task.setContext(this); + task.prepareDialog(R.string.dialog_message_logging_in_provided_by_user, R.string.dialog_title_logging_in); + return task; + } + + @SuppressLint("StaticFieldLeak") + private class UserProvidedCredentialsTask extends CredentialsDialogBuilder.CheckCredentialsTask { + + private String previousEmail; + private String UNKNOWN = "Unknown user."; + private String PICASAWEB = "picasaweb"; + private String Name, Url; + + @Override + protected CredentialsDialogBuilder getDialogBuilder() { + return new UserProvidedAccountDialogBuilder(context).setPreviousEmail(previousEmail); + } + + @Override + protected Void doInBackground(String[] params) { + if (params.length < 2 + || params[0] == null + || params[1] == null + || TextUtils.isEmpty(params[0]) + || TextUtils.isEmpty(params[1]) + ) { + exception = new CredentialsEmptyException(); + return null; + } + previousEmail = params[0]; + try { + new PlayStoreApiAuthenticator(context).login(params[0], params[1]); + addUsedEmail(params[0]); + } catch (Throwable e) { + if (e instanceof AuthException && null != ((AuthException) e).getTwoFactorUrl()) { + addUsedEmail(params[0]); + } + exception = e; + } + return null; + } + + private void addUsedEmail(String email) { + Set emailsSet = Util.getStringSet(context, "USED_EMAILS_SET"); + emailsSet.add(email); + Util.putStringSet(context, "USED_EMAILS_SET", emailsSet); + } + + @Override + protected void onPostExecute(Void result) { + super.onPostExecute(result); + if (success()) { + PreferenceManager.getDefaultSharedPreferences(LoginActivity.this).edit().putBoolean("LOGGED_IN", true).apply(); + PreferenceManager.getDefaultSharedPreferences(LoginActivity.this).edit().putBoolean("GOOGLE_ACC", true).apply(); + PreferenceManager.getDefaultSharedPreferences(LoginActivity.this).edit().putBoolean("DUMMY_ACC", false).apply(); + setUser(); + } + } + + @SuppressLint("StaticFieldLeak") + private void setUser() { + Email = PreferenceFragment.getString(LoginActivity.this, PlayStoreApiAuthenticator.PREFERENCE_EMAIL); + new GoogleAccountInfo(Email) { + @Override + public void onPostExecute(String result) { + parseRAW(result); + } + }.execute(); + } + + private void parseRAW(String rawData) { + if (rawData.contains(PICASAWEB) && !rawData.contains(UNKNOWN)) { + Name = rawData.substring(rawData.indexOf("") + 6, rawData.indexOf("")); + Url = rawData.substring(rawData.indexOf("") + 18, rawData.lastIndexOf("")); + } else { + Name = Email; + Url = "I dont fucking care"; + } + + PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).edit().putString("GOOGLE_NAME", Name).commit(); + PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).edit().putString("GOOGLE_URL", Url).commit(); + if (!Url.isEmpty()) { + finish(); + } + } + } + + @SuppressLint("StaticFieldLeak") + private class LoginTask extends AccountTypeDialogBuilder.AppProvidedCredentialsTask { + + @Override + protected void payload() throws IOException { + new PlayStoreApiAuthenticator(context).login(); + } + + @Override + protected void onPostExecute(Void result) { + super.onPostExecute(result); + PreferenceManager.getDefaultSharedPreferences(context).edit().putBoolean("LOGGED_IN", true).apply(); + PreferenceManager.getDefaultSharedPreferences(context).edit().putBoolean("DUMMY_ACC", true).apply(); + PreferenceManager.getDefaultSharedPreferences(context).edit().putBoolean("GOOGLE_ACC", false).apply(); + LoginActivity.this.finish(); + } + } + + protected void setText(int viewId, String text) { + TextView textView = ViewUtils.findViewById(this, viewId); + if (null != textView) + textView.setText(text); + } + + protected void setText(int viewId, int stringId, Object... text) { + setText(viewId, this.getString(stringId, text)); + } + + protected boolean isGoogle() { + return PreferenceFragment.getBoolean(this, "GOOGLE_ACC"); + } + + protected boolean isLoggedIn() { + return PreferenceFragment.getBoolean(this, "LOGGED_IN"); + } + + protected boolean isConnected() { + return PhoneUtils.isNetworkAvailable(this); + } +} diff --git a/app/src/main/java/in/dragons/galaxy/fragment/AccountsFragment.java b/app/src/main/java/in/dragons/galaxy/fragment/AccountsFragment.java index 9d307ef4e..15e1270e5 100644 --- a/app/src/main/java/in/dragons/galaxy/fragment/AccountsFragment.java +++ b/app/src/main/java/in/dragons/galaxy/fragment/AccountsFragment.java @@ -1,6 +1,7 @@ package in.dragons.galaxy.fragment; import android.app.AlertDialog; +import android.content.Intent; import android.content.SharedPreferences; import android.content.res.ColorStateList; import android.os.Bundle; @@ -21,6 +22,7 @@ import com.squareup.picasso.Picasso; import in.dragons.galaxy.CircleTransform; import in.dragons.galaxy.PlayStoreApiAuthenticator; import in.dragons.galaxy.R; +import in.dragons.galaxy.activities.LoginActivity; public class AccountsFragment extends UtilFragment { @@ -52,7 +54,6 @@ public class AccountsFragment extends UtilFragment { drawGoogle(); } else if (isLoggedIn() && isDummy()) drawDummy(); - setFab(); return v; diff --git a/app/src/main/java/in/dragons/galaxy/fragment/CategoryListFragment.java b/app/src/main/java/in/dragons/galaxy/fragment/CategoryListFragment.java index 57f90778d..d60ec343f 100644 --- a/app/src/main/java/in/dragons/galaxy/fragment/CategoryListFragment.java +++ b/app/src/main/java/in/dragons/galaxy/fragment/CategoryListFragment.java @@ -53,9 +53,7 @@ public class CategoryListFragment extends CategoryListTaskHelper { setupAllCategories(); setupTopCategories(); } - } else - LoginFirst(); - + } return v; } diff --git a/app/src/main/java/in/dragons/galaxy/fragment/UtilFragment.java b/app/src/main/java/in/dragons/galaxy/fragment/UtilFragment.java old mode 100644 new mode 100755 index 8f380825a..d0aa9e4e7 --- a/app/src/main/java/in/dragons/galaxy/fragment/UtilFragment.java +++ b/app/src/main/java/in/dragons/galaxy/fragment/UtilFragment.java @@ -30,6 +30,7 @@ import in.dragons.galaxy.PlayStoreApiAuthenticator; import in.dragons.galaxy.R; import in.dragons.galaxy.Util; import in.dragons.galaxy.activities.AccountsActivity; +import in.dragons.galaxy.activities.LoginActivity; import in.dragons.galaxy.builders.AccountTypeDialogBuilder; import in.dragons.galaxy.builders.CredentialsDialogBuilder; import in.dragons.galaxy.builders.UserProvidedAccountDialogBuilder; @@ -108,9 +109,8 @@ public abstract class UtilFragment extends Fragment { return new AlertDialog.Builder(getActivity()) .setTitle("Logged Out ?") .setMessage(R.string.header_usr_noEmail) - .setPositiveButton("Login", (dialogInterface, i) -> startActivity(new Intent(getActivity(), AccountsActivity.class))) - .setNegativeButton("Dismiss", (dialogInterface, i) -> { - }) + .setPositiveButton("Login", (dialogInterface, i) -> startActivity(new Intent(getActivity(), LoginActivity.class))) + .setCancelable(false) .show(); } diff --git a/app/src/main/res/layout-land/activity_login.xml b/app/src/main/res/layout-land/activity_login.xml new file mode 100644 index 000000000..2ff325e0c --- /dev/null +++ b/app/src/main/res/layout-land/activity_login.xml @@ -0,0 +1,208 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +