Question [TB-J706F] pre-installed Netflix app broken and black listed?

Search This thread

n4w4k

New member
Sep 9, 2008
4
12
I got the p11 pro (Xiaoxin Pad Pro with global rom) today

Same for me Netflix L3

No problem for disney plus in HD and Prime video, and SALTO (french app of streaming) show L1 in their app
Can you tell us your rom version ?
It seems we have the same tablet and yet Prime video only streams SD in my case
 

ilans

Member
Apr 29, 2011
6
0
Tel Aviv
You cannot update Netflix from Playstore because the Device is not certified, you can see that in Play store settings.
You can solve this changing region code, this procedure will force a factory reset and you will lose all data.
  1. Open settings app
  2. Write on search ####6030#
  3. Select a region different from China
After that your tablet will factory reset, your device is going to be certified and you can update Netflix that will have L1.

You'll still be able to receive OTA updates.
Thank you!!!
Worked for me
 
I don't know if this will be fixed by an update or not. It sounded to me like Netflix has already flagged the device as L3 and that's it. It is in their computer tied to your account and your stuck with it is the way I understood my chat with Netflix. This is what I mean from chat with them:
You
Again every app you can check it with say it supports and is capable except Netflix app, it's the only one that comes back different from the others and from manufacturers specs
Bernadette Netflix
I understand what you mean here, we classified your device as it is L3 so I am afraid HD will never work even though it show's as L1. Please understand that this are the things that out side of our scope and we only give you the resolution according to how the app and system specified your device.
 

Octavio_V

Member
Mar 16, 2022
14
2
I don't know if this will be fixed by an update or not. It sounded to me like Netflix has already flagged the device as L3 and that's it. It is in their computer tied to your account and your stuck with it is the way I understood my chat with Netflix. This is what I mean from chat with them:
You
Again every app you can check it with say it supports and is capable except Netflix app, it's the only one that comes back different from the others and from manufacturers specs
Bernadette Netflix
I understand what you mean here, we classified your device as it is L3 so I am afraid HD will never work even though it show's as L1. Please understand that this are the things that out side of our scope and we only give you the resolution according to how the app and system specified your device.
I got on the netflix support chat and they told me the issue was on their side and they knew about it and a fix was on the works.

Conflicting info, smoke and mirrors from both lenovo and netflix on this.

I seriously doubt this is ever getting fixed.
 
  • Like
Reactions: tek3195

MrCrayon

Senior Member
Sep 6, 2013
201
61
Xiaomi Redmi Note 4
Lenovo P11
From Lenovo Forum

I was just informed about the ETA when the new update for the Tab P11 Pro (WiFi model) - TB-J706F fixing the behavior described in this discussion is going to be released – the OTA will start to be rolled out towards the end of May (end of week 5/23). Please keep in mind that the new OTA version is going to be released in waves, so not all the devices will get it immediately – some might get it super-early, while others might get it a few days or a week later.
 

CryptMan

Senior Member
Feb 21, 2011
83
21
ZTE Axon 7
Lenovo P11
Lenovo has released the update which should fix the problem.
I haven't tried it yet because I have rooted my device, so I'm unsure if that will wotk.
 

Attachments

  • Screenshot_2022-05-23-21-19-24-445.jpeg
    Screenshot_2022-05-23-21-19-24-445.jpeg
    163 KB · Views: 57
  • Like
Reactions: tonysingh360

CryptMan

Senior Member
Feb 21, 2011
83
21
ZTE Axon 7
Lenovo P11
So I have installed, still rooted, and the device id in DRM Info has been changed to "22590".

From factory it was "17834", after L3-Downgrade it was "8159" and now it is "22590".

Edit: relating to the "com.widevine.otakeyboxprovisioner" it should be "25629" :(

Will reflash and unroot, later.

Code:
FACTORY_SYSTEM_IDS -> OTA_SYSTEM_IDS
 barbet  : 19321 -> 23942
 bramble : 17650 -> 23941
 coral   : 13674 -> 24137
 flame   : 13676 -> 24136
 redfin  : 17660 -> 23883
 sunfish : 17437 -> 24135
 J706F   : 17834 -> 25629
 
Last edited:

CryptMan

Senior Member
Feb 21, 2011
83
21
ZTE Axon 7
Lenovo P11
Next Update, I have:

- uninstalled Magisk
- relocked the bootloader
- disabled "Allow OEM Unlock" in developer settings
- did factory reset
- I'm NOT logged in to Google right now

I have NOT re-flashed until now.

Result:
DRM Info: L3
Netflix: L3
SafetyNet `attest`: "Response signature validation: error"
SafetyNet Tester: "Passed & CTS Profile match"
YASNAC: "Passed & CTS Profile match & Type = BASIC"


What I have seen while rebooting, there was something called "widevine update ..." with a symbol of 3 or 4 little boxes in the status bar.
 
Last edited:

CryptMan

Senior Member
Feb 21, 2011
83
21
ZTE Axon 7
Lenovo P11
Looks likte the fix is for multiple devices, what's unclear to me is the L3 check "mediaDrm.getPropertyString(KEY_SECURITY_LEVEL).equals("L3")" ... does this not always return L3 on our devices? or is this an online checking?

Java:
package com.widevine.otakeyboxprovisioner;

import android.content.Context;
import android.media.DeniedByServerException;
import android.media.MediaDrm;
import android.media.UnsupportedSchemeException;
import android.os.Build;
import android.util.Log;
import androidx.core.app.NotificationCompat;
import androidx.work.ForegroundInfo;
import androidx.work.ListenableWorker;
import androidx.work.Worker;
import androidx.work.WorkerParameters;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class WidevineOTAKeyboxProvisioner extends Worker {
    private static final Map<String, String> FACTORY_SYSTEM_IDS = ImmutableMap.ofEntries(WidevineOTAKeyboxProvisioner$$ExternalSyntheticBackport0.m("coral", "13674"), WidevineOTAKeyboxProvisioner$$ExternalSyntheticBackport0.m("flame", "13676"), WidevineOTAKeyboxProvisioner$$ExternalSyntheticBackport0.m("sunfish", "17437"), WidevineOTAKeyboxProvisioner$$ExternalSyntheticBackport0.m("bramble", "17650"), WidevineOTAKeyboxProvisioner$$ExternalSyntheticBackport0.m("redfin", "17660"), WidevineOTAKeyboxProvisioner$$ExternalSyntheticBackport0.m("barbet", "19321"), WidevineOTAKeyboxProvisioner$$ExternalSyntheticBackport0.m("J706F", "17834"));
    private static final String KEY_IGNORE_KEYBOX_COUNT = "debugIgnoreKeyboxCount";
    private static final String KEY_OEC_BUILD_INFO = "oemCryptoBuildInformation";
    private static final String KEY_OTA_KEYBOX_FALLBACK_DURATION = "debugOtaKeyboxFallbackDuration";
    private static final String KEY_SECURITY_LEVEL = "securityLevel";
    private static final String KEY_SYSTEM_ID = "systemId";
    private static final Map<String, String> OTA_SYSTEM_IDS = ImmutableMap.ofEntries(WidevineOTAKeyboxProvisioner$$ExternalSyntheticBackport0.m("redfin", "23883"), WidevineOTAKeyboxProvisioner$$ExternalSyntheticBackport0.m("bramble", "23941"), WidevineOTAKeyboxProvisioner$$ExternalSyntheticBackport0.m("barbet", "23942"), WidevineOTAKeyboxProvisioner$$ExternalSyntheticBackport0.m("sunfish", "24135"), WidevineOTAKeyboxProvisioner$$ExternalSyntheticBackport0.m("flame", "24136"), WidevineOTAKeyboxProvisioner$$ExternalSyntheticBackport0.m("coral", "24137"), WidevineOTAKeyboxProvisioner$$ExternalSyntheticBackport0.m("J706F", "25629"));
    private static final String TAG = "com.widevine.otakeyboxprovisioner";
    private static final List<String> TEST_SYSTEM_IDs = ImmutableList.of("7912", "26329");
    private static final String UNPROVISION_RESPONSE = "unprovision";
    private static final UUID WIDEVINE_UUID = new UUID(-1301668207276963122L, -6645017420763422227L);
    private Context mContext;
    private final String mDevice = Build.DEVICE;

    public WidevineOTAKeyboxProvisioner(Context context, WorkerParameters params) {
        super(context, params);
        this.mContext = context;
    }

    public ForegroundInfo getForegroundInfo() {
        return new ForegroundInfo(1, new NotificationCompat.Builder(this.mContext, "com.widevine.otakeyboxprovisioner").setContentTitle("com.widevine.otakeyboxprovisioner").setContentText(String.format("Updating %s system id from [%s] to [%s] if necessary", new Object[]{this.mDevice, getFactorySystemId(), getOTASystemId()})).setSmallIcon((int) R.drawable.wv_ic_64x64).build());
    }

    public ListenableWorker.Result doWork() {
        Log.i("com.widevine.otakeyboxprovisioner", "Doing Work on " + this.mDevice);
        ListenableWorker.Result result = checkPreConditions();
        if (result != null) {
            return result;
        }
        ListenableWorker.Result result2 = provision();
        if (result2 != null) {
            return result2;
        }
        return checkPostCondition();
    }

    private ListenableWorker.Result checkPreConditions() {
        if (!OTA_SYSTEM_IDS.containsKey(this.mDevice)) {
            Log.e("com.widevine.otakeyboxprovisioner", "OTA Keybox re-provisioning not supported");
            return ListenableWorker.Result.failure();
        }
        MediaDrm mediaDrm = null;
        try {
            mediaDrm = new MediaDrm(WIDEVINE_UUID);
            if (mediaDrm.getPropertyString(KEY_SECURITY_LEVEL).equals("L3")) {
                Log.e("com.widevine.otakeyboxprovisioner", "L3 device");
                return ListenableWorker.Result.failure();
            }
            String systemId = mediaDrm.getPropertyString(KEY_SYSTEM_ID);
            Log.i("com.widevine.otakeyboxprovisioner", "systemId before OTA Keybox re-provisioning: " + systemId);
            String factorySystemId = getFactorySystemId();
            if (systemId.equals(getOTASystemId())) {
                Log.i("com.widevine.otakeyboxprovisioner", "re-provisioning already done");
                ListenableWorker.Result success = ListenableWorker.Result.success();
                cleanupMediaDrm(mediaDrm);
                return success;
            } else if (systemId.equals(factorySystemId) || TEST_SYSTEM_IDs.contains(systemId)) {
                String oecBuildInfo = mediaDrm.getPropertyString(KEY_OEC_BUILD_INFO);
                Matcher matcher = Pattern.compile("Build Information: API_Version: 16.\\d+ LibOEMCrypto_Version: 1.\\d+ TA_Version: 1.(\\d+)").matcher(oecBuildInfo);
                if (!matcher.matches()) {
                    Log.e("com.widevine.otakeyboxprovisioner", "OEMCrypto build info unrecognized: " + oecBuildInfo);
                    ListenableWorker.Result failure = ListenableWorker.Result.failure();
                    cleanupMediaDrm(mediaDrm);
                    return failure;
                } else if (Integer.parseInt(matcher.group(1)) < 85) {
                    Log.e("com.widevine.otakeyboxprovisioner", "unsupported Widevine TA version: " + oecBuildInfo);
                    ListenableWorker.Result failure2 = ListenableWorker.Result.failure();
                    cleanupMediaDrm(mediaDrm);
                    return failure2;
                } else {
                    cleanupMediaDrm(mediaDrm);
                    return null;
                }
            } else {
                Log.e("com.widevine.otakeyboxprovisioner", String.format("unexpected system id %s; factory system id %s", new Object[]{systemId, factorySystemId}));
                ListenableWorker.Result failure3 = ListenableWorker.Result.failure();
                cleanupMediaDrm(mediaDrm);
                return failure3;
            }
        } catch (UnsupportedSchemeException e) {
            Log.e("com.widevine.otakeyboxprovisioner", "Widevine unsupported", e);
            return ListenableWorker.Result.failure();
        } finally {
            cleanupMediaDrm(mediaDrm);
        }
    }

    private ListenableWorker.Result provision() {
        MediaDrm drm = null;
        try {
            drm = new MediaDrm(WIDEVINE_UUID);
            drm.setPropertyString(KEY_IGNORE_KEYBOX_COUNT, "1");
            drm.setPropertyString(KEY_OTA_KEYBOX_FALLBACK_DURATION, "fast");
            new ProvisionRequester(drm, this.mContext).provision();
            cleanupMediaDrm(drm);
            return null;
        } catch (Exception e) {
            Log.e("com.widevine.otakeyboxprovisioner", "Exception occurred in re-provisioning", e);
            ListenableWorker.Result retry = ListenableWorker.Result.retry();
            cleanupMediaDrm(drm);
            return retry;
        } catch (Throwable th) {
            cleanupMediaDrm(drm);
            throw th;
        }
    }

    private ListenableWorker.Result checkPostCondition() {
        MediaDrm mediaDrm = null;
        try {
            mediaDrm = new MediaDrm(WIDEVINE_UUID);
            String systemId = mediaDrm.getPropertyString(KEY_SYSTEM_ID);
            Log.i("com.widevine.otakeyboxprovisioner", "systemId after reprovisioning: " + systemId);
            if (systemId.equals(getOTASystemId())) {
                return ListenableWorker.Result.success();
            }
            ListenableWorker.Result retry = ListenableWorker.Result.retry();
            cleanupMediaDrm(mediaDrm);
            return retry;
        } catch (Exception e) {
            Log.e("com.widevine.otakeyboxprovisioner", "Exception occurred checking final system id", e);
            return ListenableWorker.Result.retry();
        } finally {
            cleanupMediaDrm(mediaDrm);
        }
    }

    private static void cleanupMediaDrm(MediaDrm drm) {
        if (drm != null) {
            try {
                drm.provideProvisionResponse(UNPROVISION_RESPONSE.getBytes());
                drm.setPropertyString(KEY_IGNORE_KEYBOX_COUNT, "0");
            } catch (IllegalArgumentException e) {
                Log.w("com.widevine.otakeyboxprovisioner", e.getMessage() + " during cleanup");
            } catch (DeniedByServerException e2) {
                Log.e("com.widevine.otakeyboxprovisioner", "Impossible to reach here", e2);
                throw new AssertionError(e2);
            } catch (Throwable th) {
                drm.close();
                throw th;
            }
            drm.close();
        }
    }

    private String getOTASystemId() {
        return OTA_SYSTEM_IDS.getOrDefault(this.mDevice, "");
    }

    private String getFactorySystemId() {
        return FACTORY_SYSTEM_IDS.getOrDefault(this.mDevice, "");
    }
}
 

MrCrayon

Senior Member
Sep 6, 2013
201
61
Xiaomi Redmi Note 4
Lenovo P11
Confirmed working OTA update for XIaoxin Pad Pro, Netflix is playing FullHD.

Looks likte the fix is for multiple devices, what's unclear to me is the L3 check "mediaDrm.getPropertyString(KEY_SECURITY_LEVEL).equals("L3")" ... does this not always return L3 on our devices? or is this an online checking?
I think that means that if you have L3, either for unlocked bootloader or because you lost it, the fix does nothing.
In other words the fix is only for who has already L1 (hardware level) but problems with Netflix, HBO etc.
 

Top Liked Posts

  • There are no posts matching your filters.
  • 6
    From Lenovo Forum:

    "our technicians have confirmed that they have identified the root cause for the behavior described in this discussion and that they are currently working on a fix for this symptom. We do not have an ETA for the fix yet, but I keep this item high on my priority list and will continue inquiring about the current status."
    2
    just intall netflix version 7.80
    this would solve the problem. and don't update it
    2
    Let me know if yours stays, maybe we can figure it out what's different.

    You are right, there happens something in the background.
    I have NOT played any movies for about 3~4 hours and now the 7.120.0 downgraded itself to L3.

    The app also got a new menu entry "playback specification", after updateting from 6.26.1 to 7.120.0 this entry is NOT displayed.

    I really like this kind of "service". You pay a lot of money and they just decide to change what you have to use.
    It's like you buy a 80" TV and a week later it shrinks it self to 19" ...
    1
    I'm still waiting for the OTA...
    There must be a way to fool the system...
    1
    Yeah I tried a tons of netflix versions, nothing works.
    I am starting to wonder if it was ever L1 on netflix on this tablet :ROFLMAO: