• After 15+ years, we've made a big change: Android Forums is now Early Bird Club. Learn more here.

  • Suggestion Suggestion
Rename "Gaming" section to "Video-games"?

In my opinion: the "Gaming" section of the forum should be renamed "Video-games"? "Gaming" (and "gamer") is jargon, slang. The standard English term is "video-game", and that's the term people are more likely to understand. This is especially important if we want this forum to speak to a worldwide audience, and not just people who speak English as their first language.

Need some help with hooking NFC

Hey All!
Im working on my first Magisk Module; a "Minimal-NFC-Framework Magisk Module"; for NFC devs and Researchers. The goal here is to have a cross-compatible and customizable NFC framework that contains a hook and some other useful NFC related dev tools (I.e NFCGate, but its own hook isn't working correctly on some devices, part of why i want to make a more compatible hook). Currently I've got the NXP SNxxxU series controllers supported, with plans to add the rest of NXP's stuff if/when someone reports it as needed, Likewise with all other NFC controllers and their framework/firmware. My Github repo for this project can be found here. You can see I've got a pretty good start already. I am having to reverse engineer my way through all of this as I can not find too much documentation on it. Please share any docs you may find too that may help!

So Hurdle #1 -->I optimally need to sort out a way to hook NFC in a similar way to xHook (The hook NFCGate uses), I have not messed with hooking before so need some good advice/guides/templates or prebuilt solutions.
Requirements for hook?
1- Support for android 10-13
2- ???

Hurdle #2 --> Need to identify the most common NFC controllers used on other devices so i can collect/source all the needed componets/files/libs/etc
Hurdle #3 --> Figure out a way to dynamically detect and mount the correct init/firmware & config files for the NFC controller on each individual device.

If you think you could help with this I want to hear from you! Even the smallest advice could be what I was missing!
Find me on any TG/Discord/Twitter
@k0mraid3

I just found my perfect Linux distro, Q4OS + Trinity

For a long time I've either lived with Windows 7 or badly attempted themes on Linux, neither of which felt 'right' especially today. Either I lived with unsupported and constantly breaking software requiring involved methods to keep it going or I lived with 'modern' garbage with a skin on top that never gave me that skeuomorphic itch.

But I found this Linux distro called Q4OS that while it's a pain to install (took HOURS to download its components over the internet, as it's not all there on the ISO image) it has this DE called Trinity that is a early 2000s time capsule, apps and all. From Amarok 1.4, to Konquerer, to Ark archiver, to K3B CD burning tool. HOWEVER, it's still maintained. You get the skeuomorphic touch but modern support for the web, YouTube, the works. I don't know where this distro has been hiding for the last ten years but I'm glad I found it.

If anyone is still into skeuomorphism or misses old KDE 3, this is a good one to try. All the best of the old but with the support of the new.


I'd take a screenshot but all the damned thing captures is the current open app, not the entire desktop. Prtsc isn't doing anything (bad keyboard on laptop?)

After Update

Hello Everyone,

I have just joined the forum and if I make any errors, please forgive me!

I am using a Galaxy A13, and following an update yesterday, I am left with an un-removable notice on an orange background saying - "Complete your OS upgrade?" click here to get started.

I actually clicked it and found a list of Apps that I do not want, Now I am unable to delete this message which "hangs around" on my notification locafion alongside my clock printout at the top left of my screen.

I have tried re-starting the device, but it still appears.

I am not very competent with technical matters, and also, being well past my sell-by date, I would be grateful if any answers and advice would be be in "simple" terms!

Regards,

ColinX

KOTLIN : HOW TO MAKE A FRAGMENT VISIBLE PROGRAMATICALLY

MAN, DO I NEED HELP!!

I have a MainActivity.kt along with its related MainActivity.xml.

I also have a Fragment that is a part of the MainActivity and it is consists of a MyFragment.kt and MyFragment.xml.
Within the MyFragment.xml I've specified that the MyFragment is Invisible, which means that wne the app starts and the MainActivity gets laid out, that MyFragment is not visible to the user.

I also have a MakeMyFragmentVisibleButton that's part of the MainActivity which, when clicked, I want to cause the MyFragment to become visible.

I am ASSUMING that while the MyFragment is INvisible no buttons or other controls that might be IN that MyFragmment are effectgivly UN-available to the user. He can't see them, can't interact with them.

BUT when the MakeMyFragmentVisibleButton is clicked by the user I want the MyFragment to become visible and thereby make any controls that might be within the MyFragment become visble and the user can interact with them.

That is how I WANT it to work.

BUT I can't figure out how to cause the MyFragment to become visible. I have succeeded in setting an onClickListener for the Button and it does indeed get called when the user clicks the button. But I haven't figure out WHAT CODE actually must run in order to make the MyFragment VISIBLE.

I looked at dozens of YouTube videos and online documents but they all seem to be written in JAVA. My app is in Kotlin which, unfortunately I have zero experience with (I have 45 years experience as a software engineer but I"m baffled by Kotlin).

So, if someone could PLEASE enlighten me as to what I need to do in Kotlin code to cause a Fragment to become visible (and correspondingly IN-visible) I would really appreciate it.

How to mute or stop Samsung Account notifications?

I'm using a Samsung Galaxy S9, model number SM-G965U, running Android version 10. It is not rooted.

I am annoyed because, on what seems like a daily basis, I get a notification from the app, "Samsung account," to let me know Samsung's legal terms have been updated.

When this happens, my phone makes the exact same noise it makes when I receive a text message. This is bad, because I don't want to miss any important messages, so every time this stupid app sends a notification, I get all activated about checking my phone.

When I go under Settings/Apps/Samsung account/Notifications, the only setting I'm allowed to change is "App icon badges." The settings for "Show notifications" and "General notifications" are on, and can not be altered or turned off.

Is there no way for me to take away this app's ability to pester me with notification sounds?

Side question: Is it possible to assign to my text messaging app a unique notification sound, so that notifications from other apps would no longer be mistaken for text message notifications?

Thank you!

Solution to "Hey Google" not working after Android 13 security update

"Hey Google" (AKA, Google Assistant) stops working after the phone is rebooted after installing the June 2023 security update. It seems the update turns off Google Assistant. To get it back it was necessary to not only toggle Assistant ON, but also retrain voice match (as though setting it up for the first time). Odd, but no further issue since doing this. HTH!

Open file dialog

Hi all, I have been trying for 3 days to create some code (button click) that will allow me to select a mp3 file from the media library and copy it to another directory within the app structure. I have sought assistance from 2 ai sources but have but have gotten all tangled up in permissions and other structural problems. So far I cannot even get the file open dialog to start and show any files. Does someone have some sample code that actually works? I would need to specify the music library location and the destination location.

Thanks

help me fix this app

package com.example.mobilemoneytransfer

import java.util.*

import kotlinx.serialization.*
import kotlinx.serialization.json.*
import kotlinx.coroutines.*
import retrofit2.*
import retrofit2.converter.gson.*

@Serializable
data class TransactionRecord(
val senderPhoneNumber: String,
val recipientPhoneNumber: String,
val amount: Int,
val timestamp: Long
)

interface MobileMoneyApi {
@POST("send-money")
suspend fun sendMoney(
phoneNumber: String,
pin: String,
recipientPhoneNumber: String,
amount: Int
): Response<Unit>

@POST("pay-bill")
suspend fun makePayment(
billNumber: String,
amount: Double,
phoneNumber: String
): Response<Unit>

@GET("transaction-history")
suspend fun getTransactionHistory(
phoneNumber: String,
pin: String,
fromDate: Date?,
toDate: Date?
): Response<List<TransactionRecord>>
}

class SendMoneyService {

private val client = OkHttpClient.Builder()
.addInterceptor(HttpLoggingInterceptor().apply { level = HttpLoggingInterceptor.Level.BODY })
.build()

private val json = Json {
prettyPrint = true
}

private val api = Retrofit.Builder()
.baseUrl("https://api.mobilemoney.com/")
.addConverterFactory(GsonConverterFactory.create())
.build()
.create(MobileMoneyApi::class.java)

fun sendMoney(
senderPhoneNumber: String,
senderPin: String,
recipientPhoneNumber: String,
amount: Int
): suspend (Result<Unit>) {
return withContext(Dispatchers.IO) {
val response = try {
api.sendMoney(senderPhoneNumber, senderPin, recipientPhoneNumber, amount)
} catch (e: Exception) {
return@withContext Result.failure(e)
}

if (response.isSuccessful) {
return@withContext Result.success(Unit)
} else {
return@withContext Result.failure(RuntimeException("Error sending money"))
}
}
}

fun getTransactionHistory(
phoneNumber: String,
pin: String,
fromDate: Date?,
toDate: Date?
): suspend (Result<List<TransactionRecord>>) {
return withContext(Dispatchers.IO) {
val response = try {
api.getTransactionHistory(phoneNumber, pin, fromDate, toDate)
} catch (e: Exception) {
return@withContext Result.failure(e)
}

if (response.isSuccessful) {
val transactionRecords = response.body() ?: emptyList()
// Cache the transaction records.
TransactionRecordCache.putTransactionRecords(transactionRecords)
return@withContext Result.success(transactionRecords)
} else {
return@withContext Result.failure(RuntimeException("Error getting transaction history"))
}
}
}
}

class MakePaymentService {

private val client = OkHttpClient.Builder()
.addInterceptor(HttpLoggingInterceptor().apply { level = HttpLoggingInterceptor.Level.BODY })
.build()

private val json = Json {
prettyPrint = true
}

private val api = Retrofit.Builder()
.baseUrl("https://api.mobilemoney.com/")
.addConverterFactory(GsonConverterFactory.create())
.build()
.create(MobileMoneyApi::class.java)

fun makePayment(
billNumber: String,
amount: Double,
phoneNumber: String
): suspend (Result<Unit>) {
return withContext(Dispatchers.IO) {
val response = try {
api.makePayment(billNumber, amount, phoneNumber)
} catch (e: Exception) {
return@withContext Result.failure(e)
}

if (response.isSuccessful) {
return@withContext Result.success(

  • Question Question
Group MMS Not Sending

Hi Everyone,

Over the last couple months I've noticed an ongoing issue with Android Messages. Messages being sent to a group will not be delivered unless wifi is shut off. Receiving messages works fine though.

I have rebooted, cleared the cache/data from Messages, ensured wifi calling is on and set to wifi preferred, installed other messaging apps/used Samsung's default messaging app, turned 5G on and off, reset the APN settings to default, created a new APN, ensured auto downloading of messages is on, ensured the apps are always up to date and even factory reset the phone. Is there something I missed? No matter what I try the messages to a group don't send. I've also been told that duplicate messages of mine are received, however the message says it is undelivered on my end. Any advice you all may have would be greatly appreciated! Thank you in advance.

I'm on a Samsung Galaxy S21+ 5G through T-Mobile
Android 13
One UI 5.1
Security Patch June 1, 2023

  • Question Question
Suspected spam call is not spam - How to change it?

I'm the one who actually made the call but it comes up as 'suspected spam'. It's not blocked on my phone and I can't see any settings to tell my phone to treat it as not spam. I used the report option and chose 'not spam' but that didn't do anything other than send it to the recipient who deals with this.

Does anyone know if there's a way of removing it?

Thanks.

Why would an error say "Fragment not attached to Activity" when onDetach has never been called?

I am pretty new to Android Dev, although not new to programming in general. I'm comfortable with the basics of Android but have moved on to data persistence and am having trouble - I'm used to raw SQL queries and APIs, and am finding the Android model a little obscure. I have implemented a Room database. It has a DataViewModel that takes a DataRepository in its constructor, and therefore uses a ViewModelProvider.Factory to be instantiated.

In my opening Fragment, I want to get some basic data from users that is stored locally on the Room database - all String values (first and last name etc.). The UI gets up and running and the Fragment successfully attaches to the Activity (I am using a single Activity with multiple Fragments).

When the function to submit the user input to the database is called, the app crashes and I get the error "Fragment WelcomeFragment... not attached to an Activity" even though according to my Logcat, the onDetach() function never gets called. This makes me think the error is a red herring and something else is going on, but I have been fiddling for 5 days and haven't been able to solve it. The application called PawsApplication is in my Manifest file.

These are the relevant parts in my Fragment. It crashes right after the "Insert Client" - "Start" tag, so on the insertClient() call to the ViewModel:

Code:
    private val dataViewModel : DataViewModel by activityViewModels {
        DataViewModelFactory()
    }

Code:
fun submitToDb(f_name: String, l_name: String, a_name: String, role: String){
        val newClient = Client(0, f_name, l_name, role, a_name)
        Log.d("Insert Client", "Start")
        dataViewModel.insertClient(newClient)
        Log.d("Insert Client", "Finished")

    }
    override fun onDetach() {
        super.onDetach()
        Log.d("WelcomeFragment", "On detach")
    }

And my ViewModel factory code:

Code:
class DataViewModelFactory(): ViewModelProvider.Factory {
    override fun <T: ViewModel> create(modelClass: Class<T>, extras: CreationExtras): T {
        val application = checkNotNull(extras[APPLICATION_KEY])
        if(modelClass.isAssignableFrom(DataViewModel::class.java)){
            @Suppress("UNCHECKED_CAST")
            return DataViewModel(
                (application as PawsApplication).repository
            ) as T

        }
        throw IllegalArgumentException("Unknown ViewModel class")
    }
}

I am feeling a bit clueless at the moment! Is this a problem anyone else has run into? I've been trawling Stack Overflow for days, but haven't found a relevant solution yet. If more code is required, please ask.

Edit: forgot to add the Logcat - sorry!
Code:
FATAL EXCEPTION: main
                                                                                                    Process: com.miriam.helpingpaws, PID: 2622
                                                                                                    java.lang.IllegalStateException: Fragment WelcomeFragment{276ac35} (3be3fa8f-b72d-45e4-b0b3-4ae1274d8df2) not attached to an activity.
                                                                                                        at androidx.fragment.app.Fragment.requireActivity(Fragment.java:1000)
                                                                                                        at com.miriam.helpingpaws.welcome.WelcomeFragment.submitToDb(WelcomeFragment.kt:70)
                                                                                                        at com.miriam.helpingpaws.welcome.WelcomeScreenKt$WelcomeScreen$1$5.invoke(WelcomeScreen.kt:86)
                                                                                                        at com.miriam.helpingpaws.welcome.WelcomeScreenKt$WelcomeScreen$1$5.invoke(WelcomeScreen.kt:86)
                                                                                                        at androidx.compose.foundation.ClickableKt$clickable$4$gesture$1$1$2.invoke-k-4lQ0M(Clickable.kt:167)
                                                                                                        at androidx.compose.foundation.ClickableKt$clickable$4$gesture$1$1$2.invoke(Clickable.kt:156)
                                                                                                        at androidx.compose.foundation.gestures.TapGestureDetectorKt$detectTapAndPress$2$1$1.invokeSuspend(TapGestureDetector.kt:234)
                                                                                                        at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
                                                                                                        at kotlinx.coroutines.DispatchedTaskKt.resume(DispatchedTask.kt:178)
                                                                                                        at kotlinx.coroutines.DispatchedTaskKt.dispatch(DispatchedTask.kt:166)
                                                                                                        at kotlinx.coroutines.CancellableContinuationImpl.dispatchResume(CancellableContinuationImpl.kt:397)
                                                                                                        at kotlinx.coroutines.CancellableContinuationImpl.resumeImpl(CancellableContinuationImpl.kt:431)
                                                                                                        at kotlinx.coroutines.CancellableContinuationImpl.resumeImpl$default(CancellableContinuationImpl.kt:420)
                                                                                                        at kotlinx.coroutines.CancellableContinuationImpl.resumeWith(CancellableContinuationImpl.kt:328)
                                                                                                        at androidx.compose.ui.input.pointer.SuspendingPointerInputFilter$PointerEventHandlerCoroutine.offerPointerEvent(SuspendingPointerInputFilter.kt:566)
                                                                                                        at androidx.compose.ui.input.pointer.SuspendingPointerInputFilter.dispatchPointerEvent(SuspendingPointerInputFilter.kt:456)
                                                                                                        at androidx.compose.ui.input.pointer.SuspendingPointerInputFilter.onPointerEvent-H0pRuoY(SuspendingPointerInputFilter.kt:469)
                                                                                                        at androidx.compose.ui.node.BackwardsCompatNode.onPointerEvent-H0pRuoY(BackwardsCompatNode.kt:394)
                                                                                                        at androidx.compose.ui.input.pointer.Node.dispatchMainEventPass(HitPathTracker.kt:314)
                                                                                                        at androidx.compose.ui.input.pointer.Node.dispatchMainEventPass(HitPathTracker.kt:301)
                                                                                                        at androidx.compose.ui.input.pointer.NodeParent.dispatchMainEventPass(HitPathTracker.kt:183)
                                                                                                        at androidx.compose.ui.input.pointer.HitPathTracker.dispatchChanges(HitPathTracker.kt:102)
                                                                                                        at androidx.compose.ui.input.pointer.PointerInputEventProcessor.process-BIzXfog(PointerInputEventProcessor.kt:98)
                                                                                                        at androidx.compose.ui.platform.AndroidComposeView.sendMotionEvent-8iAsVTc(AndroidComposeView.android.kt:1329)
                                                                                                        at androidx.compose.ui.platform.AndroidComposeView.handleMotionEvent-8iAsVTc(AndroidComposeView.android.kt:1275)
                                                                                                        at androidx.compose.ui.platform.AndroidComposeView.dispatchTouchEvent(AndroidComposeView.android.kt:1214)
                                                                                                        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3120)
                                                                                                        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2801)
                                                                                                        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3120)
                                                                                                        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2801)
                                                                                                        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3120)
                                                                                                        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2801)
                                                                                                        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3120)
                                                                                                        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2801)
                                                                                                        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3120)
                                                                                                        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2801)
                                                                                                        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3120)
                                                                                                        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2801)
                                                                                                        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3120)
                                                                                                        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2801)
                                                                                                        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3120)
                                                                                                        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2801)
2023-06-23 14:13:54.849  2622-2622  AndroidRuntime          com.miriam.helpingpaws               E      at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3120)
                                                                                                        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2801)
                                                                                                        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3120)
                                                                                                        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2801)
                                                                                                        at com.android.internal.policy.DecorView.superDispatchTouchEvent(DecorView.java:502)
                                                                                                        at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1890)
                                                                                                        at android.app.Activity.dispatchTouchEvent(Activity.java:4199)
                                                                                                        at androidx.appcompat.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:70)
                                                                                                        at com.android.internal.policy.DecorView.dispatchTouchEvent(DecorView.java:460)
                                                                                                        at android.view.View.dispatchPointerEvent(View.java:14858)
                                                                                                        at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:6446)
                                                                                                        at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:6247)
                                                                                                        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5725)
                                                                                                        at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:5782)
                                                                                                        at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:5748)
                                                                                                        at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:5913)
                                                                                                        at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:5756)
                                                                                                        at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:5970)
                                                                                                        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5729)
                                                                                                        at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:5782)
                                                                                                        at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:5748)
                                                                                                        at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:5756)
                                                                                                        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5729)
                                                                                                        at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:8696)
                                                                                                        at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:8647)
                                                                                                        at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:8616)
                                                                                                        at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:8819)
                                                                                                        at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:259)
                                                                                                        at android.os.MessageQueue.nativePollOnce(Native Method)
                                                                                                        at android.os.MessageQueue.next(MessageQueue.java:335)
                                                                                                        at android.os.Looper.loopOnce(Looper.java:161)
                                                                                                        at android.os.Looper.loop(Looper.java:288)
                                                                                                        at android.app.ActivityThread.main(ActivityThread.java:7842)
                                                                                                        at java.lang.reflect.Method.invoke(Native Method)
                                                                                                        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
                                                                                                        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
                                                                                                        Suppressed: kotlinx.coroutines.DiagnosticCoroutineContextException: [androidx.compose.ui.platform.MotionDurationScaleImpl@8b58796, androidx.compose.runtime.BroadcastFrameClock@89e9f17, StandaloneCoroutine{Cancelling}@2ccef04, AndroidUiDispatcher@32d2ced]

Unlock Pixel 5g

I own a Verizon Pixel 5g that I bought and having unlock issues. I checked the IMEI with multiple sources and IMEI shows as unlocked. This both for the sim & carrier. I went to Verizon & Tmobile store and both told me the phone was unlocked. Tried unlocking the phone with the EID #. Also tried activating phone with ESIM. When I tried using the QR code only the Verizon option was showing. The Tmobile support told me that the phone should be allowing to choose Tmobile. They said this indicates the phone still has a carrier lock. Is there a way to verify this or unlock the phone.

  • Question Question
Facebook can only be used in secret mode

I have Samsung A53 5G Android 13.

I can access Facebook on the regular Samsung browser and scroll the page up or down, but that's pretty much it. If I click on anything... screen dims (if it does anything at all) till I hit back button then it brightens again.

I've x out the page and bring it back up... same issue, I've restarted phone... no change. I've even did that turning airplane mode on and off thing... no change.

Curiosity got to me and I tried Facebook in secret mode... it WORKED!!! everything so far functions as it should in secret mode. How do I get Facebook to function properly on the regular Samsung browser out of secret mode?

What caused this and how do I fix it?

Thanks in advance

Filter

Back
Top Bottom