I was just wondering since disposable addresses and sub-addresses are derived from the main wallet address.
Given an output pubkey
P in a new transaction with its tx pubkey being
R, you can recognize it as your incoming transfer by using your private viewkey
a, looking for
P - Hs(a*R)*G in your hashtable and finding an entry recoding the sub-address's index
j. Its private key
P=x*G is obtained as
x = Hs(a*R) + b + Hs(a || j). So you need both of the original private view and spend keys for receiving funds transferred to sub-addresses and disposable addresses.