Reputation: 3
I have an app which first logs in the user with firebase and then proceeds to the mainactivity. Initially I didn't have the log in feature and so the app began from mainactivity. Once I added the login activity, and tested it with my phone, it worked just fine. But after reinstalling the app, it doesn't open from login activity. It starts from the mainactivity and asks for permissions. I have done the necessary changes to Android manifest and im sure it's right. Yet it doesn't work. And I'm a beginner so please explain any solutions in detail. Thanks!
PS: im using Google location services. mypp has to request permissions for fine location, internal storage,etc. These permissions are located in Mainactivity. Code of MainActivity and LoginActivity is given below:
package com.sitepoint.example02;
import android.Manifest;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.Uri;
import android.os.Build;
import android.os.CountDownTimer;
import android.os.Environment;
import android.provider.MediaStore;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.util.Log;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import java.io.File;
import android.location.Location;
import android.support.v7.app.AppCompatActivity;
import android.widget.Toast;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.location.FusedLocationProviderApi;
import com.google.android.gms.location.LocationListener;
import com.google.android.gms.location.LocationRequest;
import com.google.android.gms.location.LocationServices;
import com.google.firebase.auth.FirebaseAuth;
import static com.sitepoint.example02.R.id.initiate;
import static com.sitepoint.example02.R.id.textView16;
public class MainActivity extends AppCompatActivity implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener, LocationListener {
private FirebaseAuth auth;
private static final String TAG = "MainActivity";
private GoogleApiClient mGoogleApiClient;
private LocationRequest mLocationRequest;
private boolean permissionIsGranted = false;
private FusedLocationProviderApi LocationProvider = LocationServices.FusedLocationApi;
private static final int MY_PERMISSIONS_REQUEST_FINE_LOCATION = 101;
private static final int MY_PERMISSIONS_REQUEST_COARSE_LOCATION = 102;
private Uri file;
TextView vv;
String latt;
String longit;
Button b;
int threshld1 = 0;
int threshld = 0;
int skipped = 0;
int locationdata=0;
String close;
int i = 0;
Button myresdone;
private ImageView whitee;
private ImageView logo;
private Button register;
private Button skipbut;
private Button takePictureButton;
private ImageView imageView;
Boolean a;
TextView signout;
TextView txt16;
String useridd="";
//private FirebaseAuth user;
private ProgressBar pbb;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//user=FirebaseAuth.getInstance();
auth=FirebaseAuth.getInstance();
pbb=(ProgressBar)findViewById(R.id.progressBar2) ;
signout=(TextView)findViewById(R.id.signout);
signout.setEnabled(false);
signout.setVisibility(View.INVISIBLE);
close = getIntent().getStringExtra("c");
if (close == "c")
finish();
whitee = (ImageView) findViewById(R.id.wholepage);
logo = (ImageView) findViewById(R.id.logo);
takePictureButton = (Button) findViewById(R.id.button_image);
register = (Button) findViewById(R.id.button3);
txt16=(TextView)findViewById(textView16);
myresdone = (Button) findViewById(R.id.button6);
skipbut = (Button) findViewById(R.id.button5);
skipbut.setEnabled(false);
skipbut.setVisibility(View.INVISIBLE);
vv = (TextView) findViewById(R.id.textView);
takePictureButton.setEnabled(false);
register.setEnabled(false);
register.setVisibility(View.INVISIBLE);
takePictureButton.setVisibility(View.INVISIBLE);
vv.setEnabled(false);
myresdone.setVisibility(View.INVISIBLE);
myresdone.setEnabled(false);
//getting user account id
useridd = auth.getCurrentUser().getUid();
vv.setVisibility(View.INVISIBLE);
new CountDownTimer(1000, 1000) {
public void onTick(long millisUntilFinished) {
}
public void onFinish() {
/* if (system==null) {
auth.signOut();
register.setVisibility(View.INVISIBLE);
register.setEnabled(false);
initiate.setVisibility(View.VISIBLE);
if (i == 1 && threshld1 != 1 && threshld != 1)
initiate.setEnabled(true);
} else {
useridd = auth.getCurrentUser().getUid();
txt16.setText(useridd);*/
a = fileExistance(useridd + ".txt");
if (!a) {
register.setVisibility(View.VISIBLE);
if(i == 1 && threshld1 != 1 && threshld != 1)
register.setEnabled(true);
} else {
skipbut.setVisibility(View.VISIBLE);
takePictureButton.setVisibility(View.VISIBLE);
myresdone.setVisibility(View.VISIBLE);
pbb.setVisibility(View.VISIBLE);
if (i == 1 && threshld1 != 1 && threshld != 1 && locationdata == 1) {
takePictureButton.setEnabled(true);
skipbut.setEnabled(true);
signout.setEnabled(true);
signout.setVisibility(View.VISIBLE);
myresdone.setEnabled(true);
pbb.setVisibility(View.INVISIBLE);
}
vv.setEnabled(true);
vv.setVisibility(View.VISIBLE);
whitee.setVisibility(View.INVISIBLE);
whitee.setEnabled(false);
logo.setVisibility(View.INVISIBLE);
logo.setEnabled(false);
}
}
}.start();
imageView = (ImageView) findViewById(R.id.imageview);
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.addApi(LocationServices.API)
.build();
mLocationRequest = new LocationRequest();
mLocationRequest.setInterval(5000);
mLocationRequest.setFastestInterval(3000);
mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
myresdone.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i=new Intent(MainActivity.this, myresdone.class);
i.putExtra("useridd",useridd);
startActivity(i);
}
});
signout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
auth.signOut();
startActivity(new Intent(MainActivity.this, LoginActivity.class));
finish();
}
});
register.setOnClickListener(new View.OnClickListener() {
public void onClick(View arg0) {
Intent rg = new Intent(MainActivity.this, Main5Activity.class);
rg.putExtra("useridd", useridd);
startActivity(rg);
}
});
skipbut.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(MainActivity.this, Main2Activity.class);
i.putExtra("latt", latt);
i.putExtra("longit", longit);
skipped = -2;
i.putExtra("useridd", useridd);
i.putExtra("skipped", skipped);
startActivity(i);
finish();
}
});
b = (Button) findViewById(R.id.btnClick);
b.setEnabled(false);
b.setVisibility(b.INVISIBLE);
b.setOnClickListener(new View.OnClickListener() {
public void onClick(View arg0) {
Intent i = new Intent(MainActivity.this, Main2Activity.class);
i.putExtra("latt", latt);
i.putExtra("longit", longit);
i.putExtra("useridd", useridd);
startActivity(i);
finish();
}
});
LocationManager_check locationManagerCheck = new LocationManager_check(
this);
Location location = null;
Boolean internet=isOnline();
if (locationManagerCheck.isLocationServiceAvailable()==false && internet==false ) {
//locationManagerCheck.createLocationServiceError(MainActivity.this);
Toast.makeText(MainActivity.this, "Internet and location access unavailable!", Toast.LENGTH_LONG).show();
}
else if(locationManagerCheck.isLocationServiceAvailable()==false && internet==true ) {
//locationManagerCheck.createLocationServiceError(MainActivity.this);
Toast.makeText(MainActivity.this, "location access unavailable!", Toast.LENGTH_LONG).show();
}
else if(locationManagerCheck.isLocationServiceAvailable()==true && internet==false ) {
//locationManagerCheck.createLocationServiceError(MainActivity.this);
Toast.makeText(MainActivity.this, "Internet connection unavailable!", Toast.LENGTH_LONG).show();
}
else if (locationManagerCheck.isLocationServiceAvailable() == true && isOnline()==true) {
i = 1;
}
}
//some required functions
public boolean fileExistance(String fname) {
File file = getBaseContext().getFileStreamPath(fname);
return file.exists();
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
if (requestCode == 0) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED
&& grantResults[1] == PackageManager.PERMISSION_GRANTED && grantResults[2] == PackageManager.PERMISSION_GRANTED) {
} else {
register.setEnabled(false);
takePictureButton.setEnabled(false);
skipbut.setEnabled(false);
threshld1 = 1;
}
} else if (requestCode == MY_PERMISSIONS_REQUEST_FINE_LOCATION) {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED && grantResults[1] == PackageManager.PERMISSION_GRANTED && grantResults[2] == PackageManager.PERMISSION_GRANTED) {
permissionIsGranted = true;
} else {
permissionIsGranted = false;
Toast.makeText(getApplicationContext(), "This app requires all three permissions to be granted", Toast.LENGTH_SHORT).show();
register.setEnabled(false);
takePictureButton.setEnabled(false);
skipbut.setEnabled(false);
threshld1 = 1;
}
}
}
public void takePicture(View view) {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
file = Uri.fromFile(getOutputMediaFile());
intent.putExtra(MediaStore.EXTRA_OUTPUT, file);
startActivityForResult(intent, 100);
}
private static File getOutputMediaFile() {
File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_PICTURES), "CameraDemo");
if (!mediaStorageDir.exists()) {
if (!mediaStorageDir.mkdirs()) {
Log.d("CameraDemo", "failed to create directory");
return null;
}
}
return new File(mediaStorageDir.getPath() + File.separator + "hsr.jpg");
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 100) {
if (resultCode == RESULT_OK) {
imageView.setImageURI(file);
vv.setVisibility(View.INVISIBLE);
if (i == 1) {
b.setEnabled(true);
b.setVisibility(b.VISIBLE);
takePictureButton.setEnabled(false);
takePictureButton.setVisibility(takePictureButton.INVISIBLE);
skipbut.setEnabled(false);
myresdone.setEnabled(false);
myresdone.setVisibility(View.INVISIBLE);
skipbut.setVisibility(View.INVISIBLE);
}
}
}
}
//Location code
/////////////////////////////////////////////////////////////////////////////////////////
@Override
protected void onStart() {
super.onStart();
mGoogleApiClient.connect();
}
protected void onResume() {
super.onResume();
if (permissionIsGranted) {
if (mGoogleApiClient.isConnected()) {
RequestLocationUpdates();
}
}
}
protected void onPause() {
super.onPause();
if (permissionIsGranted)
LocationServices.FusedLocationApi.removeLocationUpdates(mGoogleApiClient, this);
}
@Override
protected void onStop() {
super.onStop();
if (permissionIsGranted)
mGoogleApiClient.disconnect();
}
@Override
public void onConnected(Bundle bundle) {
RequestLocationUpdates();
}
private void RequestLocationUpdates() {
if ((ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) || ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED || ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
// TODO: Consider calling
// ActivityCompat#requestPermissions
// here to request the missing permissions, and then overriding
// public void onRequestPermissionsResult(int requestCode, String[] permissions,
// int[] grantResults)
// to handle the case where the user grants the permission. See the documentation
// for ActivityCompat#requestPermissions for more details.
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M ) {
requestPermissions(new String[]{Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.CAMERA,
Manifest.permission.WRITE_EXTERNAL_STORAGE}, MY_PERMISSIONS_REQUEST_FINE_LOCATION);
} else {
permissionIsGranted = true;
}
return;
}
LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, this);
}
@Override
public void onConnectionSuspended(int i) {
Log.i(TAG, "Connection Suspended");
mGoogleApiClient.connect();
}
@Override
public void onLocationChanged(Location location) {
latt = String.valueOf(location.getLatitude());
longit = String.valueOf(location.getLongitude());
locationdata=1;
if (i == 1 && threshld1 != 1 && threshld != 1 &&locationdata==1) {
takePictureButton.setEnabled(true);
skipbut.setEnabled(true);
myresdone.setEnabled(true);
signout.setEnabled(true);
signout.setVisibility(View.VISIBLE);
pbb.setVisibility(View.INVISIBLE);
}
}
@Override
public void onConnectionFailed(ConnectionResult connectionResult) {
Log.i(TAG, "Connection failed. Error: " + connectionResult.getErrorCode());
}
public boolean isOnline() {
ConnectivityManager conMgr = (ConnectivityManager) getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = conMgr.getActiveNetworkInfo();
if(netInfo == null || !netInfo.isConnected() || !netInfo.isAvailable()){
return false;
}
return true;
}
}
Login Activity:
package com.sitepoint.example02;
import android.text.TextUtils;
import android.widget.Toast;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.Toast;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;
public class LoginActivity extends AppCompatActivity {
private EditText inputEmail, inputPassword;
private FirebaseAuth auth;
private ProgressBar progressBar;
private Button btnSignup, btnLogin, btnReset;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//Get Firebase auth instance
auth = FirebaseAuth.getInstance();
if (auth.getCurrentUser() != null) {
Intent i=new Intent(LoginActivity.this, MainActivity.class);
startActivity(i);
finish();
}
// the above code checks whether the same person had previously logged in and therefore loads previous profile*********
// set the view now
setContentView(R.layout.activity_login);
// Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
// setSupportActionBar(toolbar);
inputEmail = (EditText) findViewById(R.id.email);
inputPassword = (EditText) findViewById(R.id.password);
progressBar = (ProgressBar) findViewById(R.id.progressBar);
btnSignup = (Button) findViewById(R.id.btn_signup);
btnLogin = (Button) findViewById(R.id.btn_login);
btnReset = (Button) findViewById(R.id.btn_reset_password);
//Get Firebase auth instance
auth = FirebaseAuth.getInstance();
btnSignup.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(LoginActivity.this, signupactivity.class));
}
});
btnReset.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(LoginActivity.this, ResetPasswordActivity.class));
}
});
btnLogin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String email = inputEmail.getText().toString();
final String password = inputPassword.getText().toString();
if (TextUtils.isEmpty(email)) {
Toast.makeText(getApplicationContext(), "Enter email address!", Toast.LENGTH_SHORT).show();
return;
}
if (TextUtils.isEmpty(password)) {
Toast.makeText(getApplicationContext(), "Enter password!", Toast.LENGTH_SHORT).show();
return;
}
progressBar.setVisibility(View.VISIBLE);
//authenticate user
auth.signInWithEmailAndPassword(email, password)
.addOnCompleteListener(LoginActivity.this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
// If sign in fails, display a message to the user. If sign in succeeds
// the auth state listener will be notified and logic to handle the
// signed in user can be handled in the listener.
progressBar.setVisibility(View.GONE);
if (!task.isSuccessful()) {
// there was an error
if (password.length() < 6) {
inputPassword.setError(getString(R.string.minimum_password));
} else {
Toast.makeText(LoginActivity.this, getString(R.string.auth_failed), Toast.LENGTH_LONG).show();
}
} else {
Intent intent = new Intent(LoginActivity.this, MainActivity.class);
startActivity(intent);
finish();
}
}
});
}
});
}
}
Manifest
<?xml version="1.0" encoding="utf-8"?>
<uses-permission-sdk-23 android:name="android.permission.CAMERA" />
<uses-permission-sdk-23 android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="AniNet"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<meta-data
android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />
<activity
android:name=".LoginActivity"
android:configChanges="orientation"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".Main2Activity"
android:configChanges="orientation"
android:screenOrientation="portrait" />
<activity
android:name=".Main3Activity"
android:configChanges="orientation"
android:screenOrientation="portrait" />
<activity
android:name=".Main5Activity"
android:configChanges="orientation"
android:screenOrientation="portrait" />
<activity
android:name=".MainActivity"
android:configChanges="orientation"
android:screenOrientation="portrait" />
<activity
android:name=".signupactivity"
android:configChanges="orientation"
android:screenOrientation="portrait" />
<activity android:name=".myresdone" />
<activity android:name=".myresinfo" />
<activity android:name=".ResetPasswordActivity"></activity>
</application>
Upvotes: 0
Views: 578
Reputation: 473
You do launch from Login, then call if(auth.getCurrentUser != null){ start mainActivity}
you aren't waiting for authorization. Your basically skipping login, but it is starting with login.
Upvotes: 0
Reputation: 36
So, make sure you have added intent.action in android manifest file.
eg:
<activity android:name=".activities.LoginActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
Upvotes: 1