diff --git a/app/build.gradle b/app/build.gradle index 42353b4..54b1a06 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,8 +11,8 @@ android { applicationId "com.pixelmintdrop" minSdk 30 targetSdk 35 - versionCode 2 - versionName "0.1" + versionCode 3 + versionName "0.2" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 33cbafa..911f971 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -2,6 +2,8 @@ + + + - val isAuthenticated = task.isSuccessful && task.result.isAuthenticated - - if (isAuthenticated) { - // Show leaderboard - highScoreManager.getGooglePlayGamesManager().showLeaderboard(this) + // New logic: Try silent sign-in first, then interactive if needed. + Log.d(TAG, "Attempting silent sign-in before showing leaderboard...") + // Use googleSignInClient for silentSignIn + googleSignInClient.silentSignIn().addOnCompleteListener { silentSignInTask -> + if (silentSignInTask.isSuccessful) { + // Silent sign-in successful OR user already signed in. + Log.d(TAG, "Silent sign-in successful/already signed in. Getting leaderboard intent.") + getAndShowLeaderboardIntent() } else { - // Sign in first - gamesSignInClient.signIn().addOnCompleteListener { signInTask -> - if (signInTask.isSuccessful) { - // Now try to show leaderboard again - highScoreManager.getGooglePlayGamesManager().showLeaderboard(this) + // Silent sign-in failed. Need explicit sign-in. + Log.w(TAG, "Silent sign-in failed. Attempting interactive sign-in.", silentSignInTask.exception) + // Use gamesSignInClient for interactive signIn + gamesSignInClient.signIn().addOnCompleteListener { interactiveSignInTask -> + if (interactiveSignInTask.isSuccessful) { + // Interactive sign-in successful + Log.d(TAG, "Interactive sign-in successful. Getting leaderboard intent.") + getAndShowLeaderboardIntent() } else { - Toast.makeText(this, "Sign-in required to view leaderboard", Toast.LENGTH_SHORT).show() + // Interactive sign-in failed + Log.e(TAG, "Interactive sign-in failed.", interactiveSignInTask.exception) + Toast.makeText(this, "Sign-in failed. Please try again.", Toast.LENGTH_SHORT).show() } } } } } + + // Helper function to get the intent from GooglePlayGamesManager and show it + private fun getAndShowLeaderboardIntent() { + highScoreManager.getGooglePlayGamesManager().showLeaderboard(this, + object : GooglePlayGamesManager.LeaderboardIntentListener { + override fun onLeaderboardIntentSuccess(intent: Intent) { + Log.d(TAG, "Received leaderboard intent, starting activity for result.") + try { + startActivityForResult(intent, RC_LEADERBOARD_UI) + } catch (e: Exception) { + Log.e(TAG, "Failed to start leaderboard activity for result", e) + Toast.makeText(this@MainActivity, "Could not display leaderboard.", Toast.LENGTH_SHORT).show() + } + } + + override fun onLeaderboardIntentFailure(exception: Exception) { + Log.e(TAG, "Failed to get leaderboard intent.", exception) + Toast.makeText(this@MainActivity, "Could not display leaderboard.", Toast.LENGTH_SHORT).show() + } + }) + } } \ No newline at end of file diff --git a/app/src/main/java/com/pixelmintdrop/model/GooglePlayGamesManager.kt b/app/src/main/java/com/pixelmintdrop/model/GooglePlayGamesManager.kt index 3dcf6ae..aff48d1 100644 --- a/app/src/main/java/com/pixelmintdrop/model/GooglePlayGamesManager.kt +++ b/app/src/main/java/com/pixelmintdrop/model/GooglePlayGamesManager.kt @@ -16,6 +16,12 @@ import com.google.android.gms.tasks.Task class GooglePlayGamesManager(private val context: Context) { private val TAG = "GooglePlayGamesManager" + // Define a listener interface for the leaderboard intent + interface LeaderboardIntentListener { + fun onLeaderboardIntentSuccess(intent: Intent) + fun onLeaderboardIntentFailure(exception: Exception) + } + // Leaderboard ID companion object { const val LEADERBOARD_ID = "CgkImJW2mKsSEAIQAQ" @@ -71,26 +77,33 @@ class GooglePlayGamesManager(private val context: Context) { } } - // Show the leaderboard - fun showLeaderboard(activity: Activity) { - val account = GoogleSignIn.getLastSignedInAccount(context) - if (account == null) { - Log.w(TAG, "Not signed in, cannot show leaderboard") - return - } + // Show the leaderboard - Now uses a listener to return the Intent + fun showLeaderboard(activity: Activity, listener: LeaderboardIntentListener) { + Log.d(TAG, "showLeaderboard called in GooglePlayGamesManager") + Log.d(TAG, "Attempting to get LeaderboardsClient (assuming user is signed in)") try { val leaderboardsClient = PlayGames.getLeaderboardsClient(activity) + Log.d(TAG, "LeaderboardsClient obtained, attempting to get leaderboard intent for ID: $LEADERBOARD_ID") leaderboardsClient .getLeaderboardIntent(LEADERBOARD_ID) .addOnSuccessListener { intent -> - activity.startActivity(intent) + Log.d(TAG, "Successfully obtained leaderboard intent. Calling listener.") + // try { // Removed - Activity start is now handled by MainActivity + // activity.startActivity(intent) + // Log.d(TAG, "Leaderboard activity started successfully.") + // } catch (e: Exception) { + // Log.e(TAG, "Error starting leaderboard activity", e) + // } + listener.onLeaderboardIntentSuccess(intent) } .addOnFailureListener { e -> - Log.e(TAG, "Error showing leaderboard", e) + Log.e(TAG, "Error getting leaderboard intent", e) + listener.onLeaderboardIntentFailure(e) } } catch (e: Exception) { - Log.e(TAG, "Error showing leaderboard", e) + Log.e(TAG, "Error obtaining LeaderboardsClient or getting leaderboard intent", e) // Updated log message + listener.onLeaderboardIntentFailure(e) } } } \ No newline at end of file diff --git a/app/src/main/res/layout-land/activity_main.xml b/app/src/main/res/layout-land/activity_main.xml index 715a14d..bd54ce7 100644 --- a/app/src/main/res/layout-land/activity_main.xml +++ b/app/src/main/res/layout-land/activity_main.xml @@ -438,6 +438,34 @@ android:singleLine="true" android:focusable="true" android:focusableInTouchMode="true" /> + + +