iZettle / sdk-android

Add card payments from Zettle to your own app
https://developer.zettle.com/docs/android-sdk
24 stars 20 forks source link

CardReadersActivity InflateException error #11

Closed jonassimonaitis closed 2 years ago

jonassimonaitis commented 3 years ago

Expected Behavior

Open CardReadersActivity

Current Behavior

CardReadersActivity crashes due to android.view.InflateException

Steps to Reproduce

startActivity(CardReadersActivity.newIntent(this)) Call CardReaderActivity

Context

Failure Logs

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.mobonapps.kiosk, PID: 27501
    android.view.InflateException: Binary XML file line #29: Binary XML file line #29: Error inflating class TextView
    Caused by: android.view.InflateException: Binary XML file line #29: Error inflating class TextView
    Caused by: java.lang.UnsupportedOperationException: Failed to resolve attribute at index 15: TypedValue{t=0x2/d=0x7f040129 a=-1}
        at android.content.res.TypedArray.getDimensionPixelSize(TypedArray.java:731)
        at android.view.View.<init>(View.java:5030)
        at android.widget.TextView.<init>(TextView.java:892)
        at android.widget.TextView.<init>(TextView.java:886)
        at androidx.appcompat.widget.AppCompatTextView.<init>(AppCompatTextView.java:100)
        at androidx.appcompat.widget.AppCompatTextView.<init>(AppCompatTextView.java:95)
        at androidx.appcompat.app.AppCompatViewInflater.createTextView(AppCompatViewInflater.java:194)
        at androidx.appcompat.app.AppCompatViewInflater.createView(AppCompatViewInflater.java:115)
        at androidx.appcompat.app.AppCompatDelegateImpl.createView(AppCompatDelegateImpl.java:1551)
        at androidx.appcompat.app.AppCompatDelegateImpl.onCreateView(AppCompatDelegateImpl.java:1602)
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:772)
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730)
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:863)
        at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:515)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:374)
        at androidx.appcompat.app.AppCompatDelegateImpl.createSubDecor(AppCompatDelegateImpl.java:873)
        at androidx.appcompat.app.AppCompatDelegateImpl.ensureSubDecor(AppCompatDelegateImpl.java:806)
        at androidx.appcompat.app.AppCompatDelegateImpl.onPostCreate(AppCompatDelegateImpl.java:527)
        at androidx.appcompat.app.AppCompatActivity.onPostCreate(AppCompatActivity.java:127)
        at android.app.Instrumentation.callActivityOnPostCreate(Instrumentation.java:1343)
        at android.app.ActivityThread.handleStartActivity(ActivityThread.java:3006)
        at android.app.servertransaction.TransactionExecutor.performLifecycleSequence(TransactionExecutor.java:180)
        at android.app.servertransaction.TransactionExecutor.cycleToPath(TransactionExecutor.java:165)
        at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:142)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:70)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1820)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:193)
        at android.app.ActivityThread.main(ActivityThread.java:6758)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
fabriciovergara commented 3 years ago

Hi, thanks for this report.

Mostly likely it's because you are running on Android 4.0. Unfortunately this SDK is supposed to run on Android 5 or higher.
Please, can you confirm if this happens on Android 5 or higher?

We will update the docs and take a look to enforce minimal API level.

jonassimonaitis commented 3 years ago

Hey Fabricio,

I am trying to run it on Android 9 and Android 10

On Tue, Nov 10, 2020 at 5:28 PM Fabricio Vergara notifications@github.com wrote:

Hi, thanks for this report.

Mostly likely it's because you are running on Android 4.0. Unfortunately this SDK is supposed to run on Android 6 or higher. Please, can you confirm if this happens on Android 6 or higher?

We will update the docs and take a look to enforce minimal API level.

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/iZettle/sdk-android/issues/11#issuecomment-724775596, or unsubscribe https://github.com/notifications/unsubscribe-auth/ALMH4WHZ22MKK7GN6GZ2I2TSPFLYVANCNFSM4TQOVBYA .

jonassimonaitis commented 3 years ago

Any news?

fabriciovergara commented 3 years ago

I didn't managed to reproduce, would be possible to provide a sample app with this specific case?

jonassimonaitis commented 3 years ago

Unfortunately I cannot send you our code. I will paste some important snippets for you. Hope it helps

Manifest:

<application android:name=".XXX" android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/KioskTheme" android:usesCleartextTraffic="true" tools:ignore="GoogleAppIndexingWarning" tools:replace="android:theme" tools:targetApi="m">

<activity android:name="com.izettle.android.auth.OAuthActivity" android:launchMode="singleTask" android:taskAffinity="@string/oauth_activity_task_affinity">

Styles.xml:

<style name="KioskTheme" parent="Theme.MaterialComponents.Light.NoActionBar.Bridge">

@color/actionBarBackgroundColour
<item name="colorAccent">@color/colorAccent</item>
<item name="colorControlNormal">@android:color/white</item>
<item name="android:homeAsUpIndicator">@drawable/ic_keyboard_arrow_left_black_24dp</item>

defaultConfig { applicationId "com.xxxx.xxxxx" minSdkVersion 21 targetSdkVersion 29 versionCode 29 versionName "1.0.2" vectorDrawables.useSupportLibrary = true testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" }

jonassimonaitis commented 3 years ago

Some more code (openCardReaderSettings) crashes:

class IZettlePayments( private val context: Context, private val paymentRepository: PaymentRepository) {

fun startIZettlePayments() {
    val redirectUrl = "$IZETTLE_REDIRECT_URL://$IZETTLE_HOST"
    IZettleSDK.init(context, iZettleClientId, redirectUrl)
    ProcessLifecycleOwner.get().lifecycle.addObserver(SdkLifecycle(IZettleSDK))
}

fun doLogin(activity: Activity) {
    IZettleSDK.user.login(
        activity,
        ContextCompat.getColor(context, android.R.color.white)
    )
}

fun openCardReaderSettings() {
    val intent = CardReadersActivity.newIntent(context)
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
    startActivity(context, intent, null)
}

private fun buildTransactionReference(orderDetails: WebOrder):

TransactionReference { val internalTraceId = orderDetails.orderId?.toString() ?: UUID.randomUUID().toString() return TransactionReference.Builder(internalTraceId) .put( PAYMENT_EXTRA_INFO, "Payment for bill no. ${orderDetails.orderId} in ${orderDetails.venue?.name}" ) .build() }

fun startPaymentForResult(activity: Activity, orderDetails: WebOrder) {
    val intent = CardPaymentActivity.IntentBuilder(context)
        .amount(orderDetails.total?.toLong() ?: throw

NullPointerException("Amount is not valid") ) .reference(buildTransactionReference(orderDetails)) .enableLogin(true) .enableTipping(false) .enableInstalments(true) .build()

    startActivityForResult(activity, intent,

IZETTLE_PAYMENT_REQUEST_CODE, null) }

On Mon, Nov 16, 2020 at 10:30 AM Jonas Simonaitis < jonas.simonaitis@mobonapps.com> wrote:

Unfortunately I cannot send you our code. I will paste some important snippets for you. Hope it helps

Manifest:

<application android:name=".XXX" android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/KioskTheme" android:usesCleartextTraffic="true" tools:ignore="GoogleAppIndexingWarning" tools:replace="android:theme" tools:targetApi="m">

<activity android:name="com.izettle.android.auth.OAuthActivity" android:launchMode="singleTask" android:taskAffinity="@string/oauth_activity_task_affinity">

Styles.xml:

defaultConfig { applicationId "com.xxxx.xxxxx" minSdkVersion 21 targetSdkVersion 29 versionCode 29 versionName "1.0.2" vectorDrawables.useSupportLibrary = true testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" }

fabriciovergara commented 3 years ago

I understand, my idea was to create a fork from the sample in this repo and make it happen. I've create a fork and bugfix/issue-11 branch, if possible you can create a PR pointing to this branch where you can reproduce.

https://github.com/fabriciovergara/sdk-android/pull/1

jonassimonaitis commented 3 years ago

Hey @fabriciovergara,

We have found that one of our AAR dependencies had <style name="AppTheme" in values.xml and that had conflict with iZettle library. After disabling the AAR we managed to fix the issue.

Kind regards

fabriciovergara commented 3 years ago

Good to know, thanks! I'll let your design platform team to know and we will try to rename this AppTheme to something more iZettle specific to prevent future conflict. But it can take quite some time to go live.