Created
February 28, 2021 01:09
-
-
Save pedromaironi/6aee75935ff773a572e47ffd22d555a2 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.pedrodev.appchat.activities; | |
import androidx.annotation.NonNull; | |
import androidx.annotation.Nullable; | |
import androidx.annotation.RequiresApi; | |
import androidx.appcompat.app.AppCompatActivity; | |
import androidx.core.content.FileProvider; | |
import android.Manifest; | |
import android.app.AlertDialog; | |
import android.app.DownloadManager; | |
import android.content.BroadcastReceiver; | |
import android.content.Context; | |
import android.content.DialogInterface; | |
import android.content.Intent; | |
import android.content.IntentFilter; | |
import android.content.pm.PackageManager; | |
import android.database.Cursor; | |
import android.net.Uri; | |
import android.os.Build; | |
import android.os.Bundle; | |
import android.os.Environment; | |
import android.os.StrictMode; | |
import android.util.Log; | |
import android.view.View; | |
import android.webkit.MimeTypeMap; | |
import android.webkit.URLUtil; | |
import android.widget.Button; | |
import android.widget.TextView; | |
import android.widget.Toast; | |
import com.google.android.gms.auth.api.signin.GoogleSignIn; | |
import com.google.android.gms.auth.api.signin.GoogleSignInAccount; | |
import com.google.android.gms.auth.api.signin.GoogleSignInClient; | |
import com.google.android.gms.auth.api.signin.GoogleSignInOptions; | |
import com.google.android.gms.common.SignInButton; | |
import com.google.android.gms.common.api.ApiException; | |
import com.google.android.gms.tasks.OnCompleteListener; | |
import com.google.android.gms.tasks.OnSuccessListener; | |
import com.google.android.gms.tasks.Task; | |
import com.google.android.material.textfield.TextInputEditText; | |
import com.google.firebase.auth.AuthResult; | |
import com.google.firebase.database.DataSnapshot; | |
import com.google.firebase.database.DatabaseError; | |
import com.google.firebase.database.FirebaseDatabase; | |
import com.google.firebase.database.ValueEventListener; | |
import com.google.firebase.firestore.DocumentSnapshot; | |
import com.google.firebase.firestore.EventListener; | |
import com.google.firebase.firestore.FirebaseFirestoreException; | |
import com.google.firebase.firestore.ListenerRegistration; | |
import com.pedrodev.appchat.R; | |
import com.pedrodev.appchat.models.User; | |
import com.pedrodev.appchat.providers.AuthProvider; | |
import com.pedrodev.appchat.providers.VersionProvider; | |
import com.pedrodev.appchat.providers.UsersProvider; | |
import java.io.File; | |
import java.lang.reflect.Method; | |
import dmax.dialog.SpotsDialog; | |
public class MainActivity extends AppCompatActivity{ | |
TextView mTextViewRegister; | |
TextInputEditText mTextInputEmail; | |
TextInputEditText mTextInputPassword; | |
Button mButtonLogin; | |
AuthProvider mAuthProvider; | |
SignInButton mButtonGoogle; | |
GoogleSignInClient mGoogleSignInClient; | |
UsersProvider mUsersProvider; | |
VersionProvider mVersionProvider; | |
private final int REQUEST_CODE_GOOGLE = 1; | |
AlertDialog mDialog; | |
AlertDialog dialog; | |
DownloadManager mDowloadManager; | |
long enqueue; | |
static String DOWNLOAD_URL = ""; | |
DownloadManager.Request request; | |
final int WRITE_EXTERNAL_STORAGE_REQUEST_CODE = 95; | |
@Override | |
protected void onCreate(Bundle savedInstanceState) { | |
super.onCreate(savedInstanceState); | |
setContentView(R.layout.activity_main); | |
mTextViewRegister = findViewById(R.id.btnRegisterHere); | |
mTextInputEmail = findViewById(R.id.textInputEmail); | |
mTextInputPassword = findViewById(R.id.textInputPassword); | |
mButtonLogin = findViewById(R.id.btnLogin); | |
mButtonGoogle = findViewById(R.id.signInButtonGoogle); | |
mAuthProvider = new AuthProvider(); | |
mDialog = new SpotsDialog.Builder() | |
.setContext(this) | |
.setMessage("Espere un momento") | |
.setCancelable(false).build(); | |
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) | |
.requestIdToken(getString(R.string.default_web_client_id)) | |
.requestEmail() | |
.build(); | |
mGoogleSignInClient = GoogleSignIn.getClient(this, gso); | |
mUsersProvider = new UsersProvider(); | |
mButtonGoogle.setOnClickListener(new View.OnClickListener() { | |
@Override | |
public void onClick(View view) { | |
signInGoogle(); | |
} | |
}); | |
mButtonLogin.setOnClickListener(new View.OnClickListener() { | |
@Override | |
public void onClick(View view) { | |
login(); | |
} | |
}); | |
mTextViewRegister.setOnClickListener(new View.OnClickListener() { | |
@Override | |
public void onClick(View view) { | |
Intent intent = new Intent(MainActivity.this, RegisterActivity.class); | |
startActivity(intent); | |
} | |
}); | |
// Update app - check the version | |
mVersionProvider = new VersionProvider(); | |
UpdateApp(); | |
} | |
public void UpdateApp() { | |
mVersionProvider.getVersion().addListenerForSingleValueEvent(new ValueEventListener() { | |
@Override | |
public void onDataChange(@NonNull DataSnapshot snapshot) { | |
if (snapshot.exists()) { | |
try { | |
int versionCode = 0; | |
String versionName = ""; | |
String _versionCodeFB = snapshot.child("Version").child("versionApp").getValue(String.class); | |
String _versionNameFB = snapshot.child("Version").child("versionName").getValue(String.class); | |
String _urlApkFB = snapshot.child("Version").child("urlApk").getValue(String.class); | |
/* Get android:versionName */ | |
versionName = MainActivity.this.getPackageManager().getPackageInfo(MainActivity.this.getPackageName(), 0).versionName; | |
/* Get android:versionCode*/ | |
versionCode = getPackageManager().getPackageInfo(getPackageName(), 0).versionCode; | |
if (!(String.valueOf(versionCode).equals(_versionCodeFB) | |
&& (versionName.equals(_versionNameFB)))){ | |
DOWNLOAD_URL = _urlApkFB; | |
checkPermissionsUsers(); | |
} | |
} catch (PackageManager.NameNotFoundException e) { | |
e.printStackTrace(); | |
} | |
} | |
} | |
@Override | |
public void onCancelled(@NonNull DatabaseError error) { | |
Toast.makeText(MainActivity.this, "Error" | |
, Toast.LENGTH_SHORT).show(); | |
} | |
}); | |
} | |
private void checkPermissionsUsers() { | |
dialog = new AlertDialog.Builder(MainActivity.this) | |
.setTitle("New version available") | |
.setMessage("Please, update app to new version to continue reposting.") | |
.setPositiveButton("Update", | |
new DialogInterface.OnClickListener() { | |
@RequiresApi(api = Build.VERSION_CODES.M) | |
@Override | |
public void onClick(DialogInterface dialog, int which) { | |
// Check if the write permission is already available | |
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.LOLLIPOP){ | |
// Permission granted | |
DownloadApk(); | |
}else { | |
// Permissions requested when needed | |
if (checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED){ | |
//DownloadApk(); | |
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://app.sysnotes.net")); | |
startActivity(browserIntent); | |
}else { | |
// Permissions for Write external storage | |
// Provide an aditional rationale to the user if the permission was not granted | |
// and the user would benefit from additional context for the use of the permission | |
if(shouldShowRequestPermissionRationale(Manifest.permission.WRITE_EXTERNAL_STORAGE)){ | |
Toast.makeText(MainActivity.this, "Downloads permissions is needed to download apk", | |
Toast.LENGTH_SHORT).show(); | |
} | |
requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, WRITE_EXTERNAL_STORAGE_REQUEST_CODE); | |
} | |
} | |
} | |
}).setNegativeButton("No, thanks", | |
new DialogInterface.OnClickListener() { | |
@Override | |
public void onClick(DialogInterface dialog, int which) { | |
// finish(); | |
} | |
}).create(); | |
dialog.show(); | |
//BroadcastReceiver receiver = | |
} | |
private void DownloadApk() { | |
mDowloadManager = (DownloadManager) MainActivity.this.getSystemService(Context.DOWNLOAD_SERVICE); | |
request = new DownloadManager.Request(Uri.parse(DOWNLOAD_URL)); | |
String fileExtension = MimeTypeMap.getFileExtensionFromUrl(DOWNLOAD_URL); | |
Log.e("File extension", fileExtension); | |
final String name = URLUtil.guessFileName(DOWNLOAD_URL, null, fileExtension); | |
Log.e("File name", fileExtension); | |
request.setDestinationInExternalPublicDir("/apk", name); | |
String h = request.setDestinationInExternalPublicDir("/apk", name).toString(); | |
Log.e("Destino del Archivo: ", h); | |
enqueue = mDowloadManager.enqueue(request); | |
Log.e("Enqueue: ", String.valueOf(enqueue)); | |
//BroadcastReceiver(); | |
} | |
private void BroadcastReceiver(){ | |
BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() { | |
@Override | |
public void onReceive(Context context, Intent intent) { | |
String action = intent.getAction(); | |
assert action != null; | |
Log.e("Action: ", action); | |
if (DownloadManager.ACTION_DOWNLOAD_COMPLETE.equals(action)) { | |
intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, 0); | |
// String TypeMedia = mDowloadManager.getMimeTypeForDownloadedFile(0); | |
Log.e("Intent: ", String.valueOf(intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, 0))); | |
if (intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, 0) == -1) { | |
finish(); | |
} | |
DownloadManager.Query query = new DownloadManager.Query(); | |
query.setFilterById(enqueue); | |
Cursor cursor = mDowloadManager.query(query); | |
Log.e("cursor: ", String.valueOf(mDowloadManager.query(query))); | |
if (cursor.moveToFirst()) { | |
int columIndex = cursor.getColumnIndex(DownloadManager.COLUMN_STATUS); | |
if | |
(DownloadManager.STATUS_SUCCESSFUL == cursor.getInt(columIndex)) { | |
String uriString = cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI)); | |
startActivity(new Intent(Environment.DIRECTORY_DOWNLOADS)); | |
// To Open App | |
/* File file = new File(uriString); | |
Log.e("Uri: ", uriString); | |
Log.e("file: ", file.getAbsolutePath()); | |
Intent promptInstall = new Intent(); | |
promptInstall.setAction(android.content.Intent.ACTION_VIEW); | |
promptInstall.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); | |
// intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); | |
promptInstall.setDataAndType(Uri.parse("file:///storage/emulated/0/Download/SocialMedia1-0-0-1.apk"), | |
"application/vnd.android.package-archive"); | |
startActivity(promptInstall); | |
Log.e("PromptInstall: " + promptInstall, String.valueOf(cursor)); | |
// promptInstall.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); | |
//promptInstall.setDataAndType(Uri.parse(uriString), "/apk"); | |
//promptInstall.setDataAndType(Uri.fromFile(new File(Environment.getExternalStorageState(new File("/download/" + name)))), "application/vnd.android.package-archive"); | |
// promptInstall.setDataAndType(Uri.parse(uriString), | |
// "application/vnd.android.package-archive");}*/ | |
} | |
} | |
} | |
} | |
}; | |
MainActivity.this.registerReceiver(mBroadcastReceiver, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE)); | |
} | |
// Handle the response | |
@Override | |
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull | |
int[] grantResults) { | |
if(requestCode == WRITE_EXTERNAL_STORAGE_REQUEST_CODE){ | |
// received permission result for write permissions | |
//Check if the only required permission has been granted | |
if(grantResults[0] == PackageManager.PERMISSION_GRANTED){ | |
// Camera permission has been granted | |
DownloadApk(); | |
} else { | |
Toast.makeText(MainActivity.this, "Permission was not granted", Toast.LENGTH_LONG).show(); | |
} | |
}else { | |
super.onRequestPermissionsResult(requestCode, permissions, grantResults); | |
} | |
} | |
@Override | |
protected void onStart() { | |
super.onStart(); | |
if (mAuthProvider.getUserSession() != null) { | |
Intent intent = new Intent(MainActivity.this, HomeActivity.class ); | |
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK); | |
startActivity(intent); | |
} | |
} | |
@Override | |
protected void onPause() { | |
super.onPause(); | |
if (dialog != null){ | |
dialog.dismiss(); | |
dialog = null; | |
} | |
} | |
@Override | |
public void onDestroy(){ | |
super.onDestroy(); | |
if ( dialog !=null && dialog.isShowing() ){ | |
dialog.cancel(); | |
} | |
} | |
private void signInGoogle() { | |
Intent signInIntent = mGoogleSignInClient.getSignInIntent(); | |
startActivityForResult(signInIntent, REQUEST_CODE_GOOGLE); | |
} | |
@Override | |
public void onActivityResult(int requestCode, int resultCode, Intent data) { | |
super.onActivityResult(requestCode, resultCode, data); | |
// Result returned from launching the Intent from GoogleSignInApi.getSignInIntent(...); | |
if (requestCode == REQUEST_CODE_GOOGLE) { | |
Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data); | |
try { | |
// Google Sign In was successful, authenticate with Firebase | |
GoogleSignInAccount account = task.getResult(ApiException.class); | |
firebaseAuthWithGoogle(account); | |
} catch (ApiException e) { | |
// Google Sign In failed, update UI appropriately | |
Log.w("ERROR", "Google sign in failed", e); | |
// ... | |
} | |
} | |
} | |
private void firebaseAuthWithGoogle(GoogleSignInAccount acct) { | |
mDialog.show(); | |
mAuthProvider.googleLogin(acct).addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { | |
@Override | |
public void onComplete(@NonNull Task<AuthResult> task) { | |
if (task.isSuccessful()) { | |
String id = mAuthProvider.getUid(); | |
checkUserExist(id); | |
} | |
else { | |
mDialog.dismiss(); | |
// If sign in fails, display a message to the user. | |
Log.w("ERROR", "signInWithCredential:failure", task.getException()); | |
Toast.makeText(MainActivity.this, "No se pudo iniciar sesion con google", Toast.LENGTH_SHORT).show(); | |
} | |
// ... | |
} | |
}); | |
} | |
private void checkUserExist(final String id) { | |
mUsersProvider.getUser(id).addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() { | |
@Override | |
public void onSuccess(DocumentSnapshot documentSnapshot) { | |
if (documentSnapshot.exists()) { | |
mDialog.dismiss(); | |
Intent intent = new Intent(MainActivity.this, HomeActivity.class); | |
startActivity(intent); | |
} | |
else { | |
String email = mAuthProvider.getEmail(); | |
User user = new User(); | |
user.setEmail(email); | |
user.setId(id); | |
mUsersProvider.create(user).addOnCompleteListener(new OnCompleteListener<Void>() { | |
@Override | |
public void onComplete(@NonNull Task<Void> task) { | |
mDialog.dismiss(); | |
if (task.isSuccessful()) { | |
Intent intent = new Intent(MainActivity.this, CompleteProfileActivity.class); | |
startActivity(intent); | |
} | |
else { | |
Toast.makeText(MainActivity.this, "No se pudo almacenar la informacion del usuario", Toast.LENGTH_SHORT).show(); | |
} | |
} | |
}); | |
} | |
} | |
}); | |
} | |
private void login() { | |
String email = mTextInputEmail.getText().toString(); | |
String password = mTextInputPassword.getText().toString(); | |
mDialog.show(); | |
if(!email.isEmpty()){ | |
} | |
mAuthProvider.login(email, password).addOnCompleteListener(new OnCompleteListener<AuthResult>() { | |
@Override | |
public void onComplete(@NonNull Task<AuthResult> task) { | |
mDialog.dismiss(); | |
if (task.isSuccessful()) { | |
Intent intent = new Intent(MainActivity.this, HomeActivity.class); | |
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); | |
startActivity(intent); | |
} | |
else { | |
Toast.makeText(MainActivity.this, "El email o la contraseña que ingresaste no son correctas", Toast.LENGTH_LONG).show(); | |
} | |
} | |
}); | |
Log.d("CAMPO", "email: " + email); | |
Log.d("CAMPO", "password: " + password); | |
} | |
/* | |
private void UpdateApp(){ | |
final FirebaseRemoteConfig firebaseRemoteConfig = FirebaseRemoteConfig.getInstance(); | |
// set in-app defaults | |
Map<String, Object> remoteConfigDefaults = new HashMap(); | |
remoteConfigDefaults.put(ForceUpdateChecker.KEY_UPDATE_REQUIRED, false); | |
remoteConfigDefaults.put(ForceUpdateChecker.KEY_CURRENT_VERSION, "1.0.0"); | |
remoteConfigDefaults.put(ForceUpdateChecker.KEY_UPDATE_URL, | |
"https://firebasestorage.googleapis.com/v0/b/appchat-ba012.appspot.com/o/SocialMedia1-0-0.apk?alt=media&token=fcbee2f3-0083-4cfd-8b27-2916631d21ae"); | |
firebaseRemoteConfig.setDefaultsAsync(remoteConfigDefaults); | |
firebaseRemoteConfig.fetch(60) // fetch every minutes | |
.addOnCompleteListener(new OnCompleteListener<Void>() { | |
@Override | |
public void onComplete(@NonNull Task<Void> task) { | |
if (task.isSuccessful()) { | |
Log.d(TAG, "remote config is fetched."); | |
firebaseRemoteConfig.fetchAndActivate(); | |
} | |
} | |
}); | |
} | |
@Override | |
public void onUpdateNeeded(final String updateUrl) { | |
AlertDialog dialog = new AlertDialog.Builder(this) | |
.setTitle("New version available") | |
.setMessage("Please, update app to new version to continue reposting.") | |
.setPositiveButton("Update", | |
new DialogInterface.OnClickListener() { | |
@Override | |
public void onClick(DialogInterface dialog, int which) { | |
redirectStore(updateUrl); | |
} | |
}).setNegativeButton("No, thanks", | |
new DialogInterface.OnClickListener() { | |
@Override | |
public void onClick(DialogInterface dialog, int which) { | |
finish(); | |
} | |
}).create(); | |
dialog.show(); | |
} | |
private void redirectStore(String updateUrl) { | |
final Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(updateUrl)); | |
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); | |
startActivity(intent); | |
}*/ | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment